POJ 3264 Balanced Lineup
阿新 • • 發佈:2018-08-24
floor balanced build 常數 復雜度 而且 查詢 空間復雜度 就是
Balanced Lineup
ST表的裸題
- ST采用倍增和動態規劃的思想解決
靜態
RMQ問題 - 初始化:空間復雜度O(nlogn),時間復雜度O(nlogn)
- 查詢一次 O(1);而且這是常數非常小的O(1),而不是像線段樹這種毒瘤數據結構(常數非常大)
最近做一道題,ST表和線段樹如果算時間復雜度都能過,但線段樹就是過不了,自己得ST表還超過內存了,坑
代碼:
const int maxn=50010; int N,Q; int a[maxn]; int stmin[maxn][16]; int stmax[maxn][16]; void build(){ scanf("%d %d",&N,&Q); for(int i=1;i<=N;i++){ scanf("%d",&a[i]); } for(int i=1;i<=N;i++){ stmin[i][0]=a[i]; stmax[i][0]=a[i]; } int mlen=floor(log2(N)); int mul=1; for(int j=1;j<=mlen;j++){ for(int i=1;i<=N&&(i+mul)<=N;i++){ stmin[i][j]=std::min(stmin[i][j-1],stmin[i+mul][j-1]); stmax[i][j]=std::max(stmax[i][j-1],stmax[i+mul][j-1]); } mul=mul*2; } } int check(int x,int y){ int len=floor(log2(y-x+1)); int minv=std::min(stmin[x][len],stmin[y-(1<<len)+1][len]); int maxv=std::max(stmax[x][len],stmax[y-(1<<len)+1][len]); return maxv-minv; }
POJ 3264 Balanced Lineup