hdu1556 Color the Ball
2015-10-08 19:55
323 查看
利用树状数组模板解决涂色问题,感觉重点难点在将点涂色转化为区间的涂色。在对区间涂色时先从左端点涂到底,然后将右端点后的区间反涂色,就剩下了要涂色的区间了,思路非常巧妙
#include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> using namespace std; const int MAXN = 100010; int c[MAXN]; int lowbit(int x) { return x & (-x); } int Sum(int n) { int sum = 0; while (n > 0) { sum += c ; n -= lowbit(n); } return sum; } void add(int i, int x, int n) { while (i <= n) { c[i] += x; i += lowbit(i); } } int main() { int N, i; int a, b; int sizec = sizeof(c); while (scanf("%d", &N) && N) { memset(c, 0, sizec); ///用于标记涂色次数 for (i = 1; i <= N; i++) { scanf("%d%d", &a, &b); /* 重点 */ add(a, 1, N); ///从左端点开始向后涂色 add(b + 1, -1, N); ///从右端点开始向后的反涂色,将左端点涂越界的区间涂回去 ///两步结束后已将将涂色区间存入树 } ///由于树状数组的结构特性,此时区间求和结果即为点涂色次数 for (i = 1; i < N; i++) { printf("%d ", Sum(i)); } printf("%d\n", Sum(N)); } return 0; }
相关文章推荐
- 水平集方法在图像处理中的应用
- Linux Samba服务器配置
- Android Studio 主题与快捷键设置
- js实现页面跳转菜单选中
- fcntl文件锁
- 测试知识点
- 页面跳转和iframe相互访问
- nginx location匹配规则
- 这样好用的ReactiveCocoa,根本停不下来【转载】
- top 命令详解
- border
- BestCoder #58 div1
- UVA437
- LeetCode OJ:Valid Palindrome(验证回文)
- 关于一些对location认识的误区
- CYC-爱心暖暖的小动画
- UESTC 1712 Easy Problem With Numbers 除法对和数取模,分解,线段树
- Java 安全套接字编程以及 keytool 使用最佳实践
- 第6周项目2--建立链栈算法库
- NSUserDefaults