HDOJ-1556 Color the ball
2016-03-16 14:46
295 查看
这道题可以用树状数组解决,用到了区间更新,单点求值.设一个数组a(i)表示第i个球被染色的次数,在设一个数组p(i)表示第i个气球染色次数与第i-1个气球染色次数之差。如果要把a到b的气球染一次,则只需p[a]++,p[b+1]–,并且会发现a[i] = b[1] + b[2] +…b[i].此时就可以用树状数组来进行求和.
线段树解法:
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <vector> #include <climits> #include <set> using namespace std; #define maxn 100005 int c[maxn], n; void Update(int m, int p){ while(m <= n){ c[m] += p; m += m & -m; } } int Query(int m){ int sum = 0; while(m){ sum += c[m]; m -= m & -m; } return sum; } int main(){ // freopen("in.txt", "r", stdin); while(cin >> n && n){ memset(c, 0, sizeof(c)); for(int i = 1; i <= n; i++){ int a, b; scanf("%d%d", &a, &b); Update(a, 1); Update(b+1, -1); } for(int i = 1; i < n; i++) printf("%d ", Query(i)); printf("%d\n", Query(n)); } return 0; }
线段树解法:
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <vector> #include <climits> #include <set> using namespace std; #define maxn 100005 struct node{ int l, r, m; }T[maxn<<2]; int num[maxn<<2]; void Build(int n, int l, int r){ T .l = l; T .r = r; T .m = 0; if(l == r) return ; int mid = (l + r) / 2; Build(n<<1, l, mid); Build(n<<1|1, mid+1, r); } void Update(int l, int r, int n, int m){ if(T .l == l && T .r == r){ T .m += m; return ; } int mid = (T .l + T .r) >> 1; if(r <= mid) Update(l, r, n<<1, m); else if(l > mid) Update(l, r, n<<1|1, m); else{ Update(l, mid, n<<1, m); Update(mid+1, r, n<<1|1, m); } } void Query(int n, int p, int &sum){ sum += T .m; if(T .l == T .r){ return ; } int mid = (T .l + T .r) >> 1; if(p <= mid) Query(n<<1, p, sum); else Query(n<<1|1, p, sum); } int main(){ // freopen("in.txt", "r", stdin); int n; while(cin >> n && n){ Build(1, 1, n); for(int i = 1; i <= n; i++){ int a, b; scanf("%d%d", &a, &b); Update(a, b, 1, 1); } for(int i = 1; i <= n; i++){ int sum = 0; Query(1, i, sum); if(i < n) printf("%d ", sum); else printf("%d\n", sum); } } }
相关文章推荐
- Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
- 如何配置tomcat数据源以及Cannot create JDBC driver of class '' for connect URL 'null'
- 工具的使用——vs2013(三)
- 常见网站的两种攻击方式
- 树的搜索策略
- permission denied for this window type
- 字符集与编码方式解惑
- jquery 调用 click 事件的三种方式
- 强大的分布式消息中间件——kafka
- timestamp
- SAP 开发中常用到的BAPI
- Xcode中的Version和Build的区别
- 转载--Python之路,进程、线程、协程篇(原文地址:http://www.cnblogs.com/alex3714/articles/5230609.html)
- 循序渐进开发WinForm项目(2)--项目代码的分析
- 微信浏览器取消缓存的方法
- python数据持久存储:pickle模块的基本使用
- RabbitMQ与AMQP协议详解
- react-native 学习之TextInput组件篇
- 挑战P66 有关计数问题的dp
- AngularJS基本功能