windows下快速体验linux的三种方式
2010-09-11 15:52
417 查看
敌兵布阵
仍然是敌兵布阵那题,题目大意:给你一串数,然后会根据题意选择一点增加或减少,或者询问某区间的人数有多少?之前用线段树写了,而这题可以用树状树状来做,更加方便更加快速。
说下树状数组的三个主要函数:(神一样的函数,不只这些用处!!!)
1.lowbit(int i)
2.update(int i, int x)
3.sum(int i)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166
代码:
仍然是敌兵布阵那题,题目大意:给你一串数,然后会根据题意选择一点增加或减少,或者询问某区间的人数有多少?之前用线段树写了,而这题可以用树状树状来做,更加方便更加快速。
说下树状数组的三个主要函数:(神一样的函数,不只这些用处!!!)
1.lowbit(int i)
2.update(int i, int x)
3.sum(int i)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166
代码:
#include <iostream> #include <stdio.h> #include <memory.h> using namespace std; int n, a[50005]; char sh[15]; int lowbit(int i) //树状数组最巧妙之处:i&(-i) { return i&(-i); } void update(int i, int val) //更新函数 { while(i <= n) { a[i] += val; i += lowbit(i); } } int sum(int i) //求和函数 { int sum = 0; while(i > 0) { sum += a[i]; i -= lowbit(i); } return sum; } int main() { int i, val, t, x, y, zz = 1; scanf("%d", &t); while(t--) { memset(a, 0, sizeof(a)); scanf("%d", &n); for(i = 1; i <= n; i++) { scanf("%d", &val); update(i, val); } printf("Case %d:\n", zz++); while(scanf("%s", sh)) { if(sh[0] == 'E') break; scanf("%d %d", &x, &y); if(sh[0] == 'A') update(x, y); else if(sh[0] == 'S') update(x, -y); else printf("%d\n", sum(y)-sum(x-1)); //两段区间和相减 } } return 0; }
相关文章推荐
- 快速体验Linux的3种方式
- Windows和Linux下,如何在不关闭浏览器的方式下快速生效hosts修改
- 宿主机为linux、windows分别实现VMware三种方式上网
- 宿主机为linux、windows分别实现VMware三种方式上网
- 双系统中windows查看linux分区的三种方式
- 快速体验Linux的3种方式
- 快速体验Linux的3种方式
- linux内核学习-宿主机为linux、windows分别实现VMware三种方式上网(关注新浪微博:寂寞侵蚀的岁月(4000多篇技术分享))
- 宿主机为linux、windows分别实现VMware三种方式上网
- 宿主机为linux、windows分别实现VMware三种方式上网(转)
- 宿主机为linux、windows分别实现VMware三种方式上网(转)
- 宿主机为linux、windows分别实现VMware三种方式上网
- 快速体验Linux的3种方式
- 总结windows下堆溢出的三种利用方式(1)
- [Linux流操作]查看三种标准流的缓冲方式
- 【地图炮】个人的体验 谈谈 Linux VS Mac OS X VS windows
- linux运行命令的三种方式
- python MySQLdb在windows环境下的快速安装、问题解决方式
- 转载:LINUX设置环境变量的三种方式
- Linux上三种方式--ntp时间同步