NYOJ-522 Interval【树状数组】
2012-04-22 21:31
337 查看
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=522
题目大意:
给你M个区间,区间内所有整数个数+1,然后给出N个询问,问k这个数字在所有区间中一共出现了几次
解题思路:
当时第一思路就是裸的插线问点嘛,但是当时想着可能是水题,干脆水过去算了。但是悲剧了。。
于是用树状数组搞,结果悲剧的把WA看成TLE,以为看错题目了?又YY了中方法来写,总是TLE。最后无意间发现树状数组是WA啊。。。激动了一下瞬间知道是0的位置错了,然后特殊处理了一下就过了。
后来想起来,可以多加1,就不用特殊处理0了。。。。悲剧。
代码如下:
题目大意:
给你M个区间,区间内所有整数个数+1,然后给出N个询问,问k这个数字在所有区间中一共出现了几次
解题思路:
当时第一思路就是裸的插线问点嘛,但是当时想着可能是水题,干脆水过去算了。但是悲剧了。。
于是用树状数组搞,结果悲剧的把WA看成TLE,以为看错题目了?又YY了中方法来写,总是TLE。最后无意间发现树状数组是WA啊。。。激动了一下瞬间知道是0的位置错了,然后特殊处理了一下就过了。
后来想起来,可以多加1,就不用特殊处理0了。。。。悲剧。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> using namespace std; const int N = 100000; const int M = N * 2 + 10; int dp[M]; int Scan() { int res = 0 , ch; while( !( ( ch = getchar() ) >= '0' && ch <= '9' ) ) { if( ch == EOF ) return 1 << 30 ; } res = ch - '0' ; while( ( ch = getchar() ) >= '0' && ch <= '9' ) res = res * 10 + ( ch - '0' ) ; return res ; } int lowbit(int n) { return n & (-n); } void add(int i, int plus) { while(i > 0) { dp[i] += plus; i -= lowbit(i); } } int sum(int n) { int sum = 0; while(n <= M) { sum +=dp ; n += lowbit(n); } return sum; } int main() { int ncase; int num, query; int from, to, now; scanf("%d", &ncase); while(ncase--) { int i, j; memset(dp, 0, sizeof(dp)); num = Scan(); query = Scan(); for(i = 0; i < num; ++i) { scanf("%d%d", &from, &to); if(from == -100000) { dp[0]++; if(to == from) continue; else from++; } add(from - 1 + N, -1); add(to + N, 1); } for(i = 0; i < query; ++i) { scanf("%d", &now); if(now == -100000) printf("%d\n", dp[0]); else printf("%d\n", sum(now + N)); } } return 0; }
相关文章推荐
- NYOJ 522 Interval (树状数组)
- nyoj----522 Interval (简单树状数组)
- nyoj 树状数组 522Interval 116士兵杀敌(二)
- nyoj 522 树状数组入门
- Interval (树状数组)
- NYOJ117&& 树状数组求逆序数
- NYOJ 116:士兵杀敌 第一次用树状数组AC题目
- NYOJ 233 &&NYOJ 322 Sort(树状数组)
- nyoj 116 士兵杀敌(二)<经典树状数组-插点问线>
- nyoj123士兵杀敌(四)树状数组
- nyoj322 sort 归并排序,树状数组
- nyoj116 士兵杀敌(二)树状数组 插点问线
- nyoj 123 士兵杀敌(四)(树状数组——插线问点)
- 2015合肥网络赛 HDU 5489 Removed Interval LIS+线段树(树状数组)
- NYOJ 2689(树状数组)
- NYOJ 116 士兵杀敌(二) (树状数组)
- nyoj 123 树状数组 插线问点
- nyoj 123 士兵杀敌(四)(树状数组——插线问点)
- nyoj 117 求逆序数【线段树 树状数组 归并排序】
- nyoj--108--士兵杀敌(一)(区间求和&&树状数组)