poj 3264 Balanced Lineup
来源:互联网 发布:三年数据对比分析 编辑:程序博客网 时间:2024/05/21 21:34
一个简单的线段树,憋了我好久。问题出在了存数据的数组开得不够,因为我建立线段树时要从D-1开始,但是D那一行的元素个数,可能会超过50000所以,存数据的数组要开的大一些。
1 #include<stdio.h> 2 #define INF 1000000000 3 4 int n, m,D,a[(50000+1000)<<1],treemin[51000<<2], treemax[51000<<2]; 5 6 void build() 7 { 8 for(int i = D-1; i > 0; i --) 9 {10 if(treemin[i<<1] > n || treemin[i<<1] == 0) a[treemin[i<<1]] = INF;11 if(treemin[i<<1|1] > n || treemin[i<<1|1] == 0) a[treemin[i<<1|1]] = INF;12 treemin[i] = (a[treemin[i<<1]]<a[treemin[i<<1|1]] ? treemin[i<<1] : treemin[i<<1|1]);13 14 if(treemax[i<<1] > n || treemax[i<<1] == 0) a[treemax[i<<1]] = -1;15 if(treemax[i<<1|1] > n || treemax[i<<1|1] == 0) a[treemax[i<<1|1]] = -1;16 treemax[i] = (a[treemax[i<<1]]>a[treemax[i<<1|1]] ? treemax[i<<1] : treemax[i<<1|1]);17 } 18 }19 20 void querymax(int cur, int x, int y, int s, int t, int& ans1)21 {22 int mid = (x + y) >> 1, ls = cur << 1, rs = cur << 1 | 1;23 if(x >= s && y <= t)24 {25 if(a[treemax[cur]] > ans1) ans1 = a[treemax[cur]];26 return ;27 }28 if(mid >= s)29 querymax(ls, x, mid, s, t, ans1);30 if(mid + 1 <= t)31 querymax(rs, mid + 1, y, s, t, ans1);32 }33 34 void querymin(int cur, int x, int y, int s, int t, int& ans2)35 {36 int mid = (x + y) >> 1, ls = cur << 1, rs = cur << 1 | 1;37 if(x >= s && y <= t)38 {39 if(ans2 > a[treemin[cur]]) ans2 = a[treemin[cur]];40 return;41 }42 if(mid >= s)43 querymin(ls, x, mid, s, t, ans2);44 if(mid+1<= t)45 querymin(rs, mid+1, y, s, t, ans2);46 }47 48 int solve(int x, int y)49 {50 int ans1 = -INF;51 querymax(1,0,D-1,x,y,ans1);52 int ans2 = INF;53 querymin(1,0,D-1,x,y,ans2);54 //printf("treemax[1]=%d\n",treemax[1]);55 //printf("ans1 = %d ans2 = %d\n",ans1, ans2);56 return ans1 - ans2;57 }58 void init()59 {60 while(~scanf("%d%d",&n,&m))61 {62 for(int i = 1; i <= n; i ++)63 scanf("%d",&a[i]);64 for(D = 1; D < n + 2; D <<= 1);65 for(int i = 0; i < D; i ++)66 {67 treemax[D+i] = i;68 treemin[D+i] = i;69 }70 build();71 int A, B;72 while(m --)73 {74 scanf("%d%d",&A,&B);75 printf("%d\n",solve(A,B));76 }77 }78 }79 int main()80 {81 init();82 return 0;83 }
0 0
- POJ 3264 Balanced Lineup
- POJ 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- Poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- POJ-3264-Balanced Lineup
- poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- POJ 3264-Balanced Lineup
- poj 3264 Balanced Lineup
- POJ 3264 Balanced Lineup
- POJ-3264-Balanced Lineup
- POJ 3264 Balanced Lineup
- POJ 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- poj 1442 Black Box
- 个人linux命令总结
- poj 2299 Ultra-QuickSort
- Centos下webmin的安装和配置
- poj 2388 Who's in the Middle
- poj 3264 Balanced Lineup
- g729源码分析-3-基音周期搜索(上)
- 好久没有写博客了,最近一段时间做一下总结吧!
- 由异常掉电问题---谈xfs文件系统
- 大数据说话:怎样的程序员最抢手?
- VM参数简介
- xfs参数简介
- 插入外置网卡端口顺序混乱--linux系统
- IE下面解决安全限制而无法接收隐藏file标签提交的内容。