hdu5372Segment Game 树状数组
来源:互联网 发布:农村淘宝政府如何补贴 编辑:程序博客网 时间:2024/06/03 20:13
//n个输入//a[i] b[i] a[i] = 0 , 加上线段[b[i],b[i]+x] , x为加操作的个数//a[i] = 1 减去第b[i]个加入的线段//问对于每一个新加的区间能够包括有多少完整的区间//可以知道线段的长度是递增的,所以原来的区间的长度没有大于现在的//所以只要求原来的所有区间的左区间大于新加的减去右边大的//然后由于|b[i]|<=1e9//所以先将其离线,然后排个序,用二分找#include<cstdio>#include<cstring>#include<cstdio>#include<algorithm>#include<iostream>#include<map>using namespace std ;const int maxn = 2e5+10 ;int tree[2][maxn] ;int a[maxn] , b[maxn] ;int l[maxn] , r[maxn] ;int ssl[maxn] , ssr[maxn] ;int n ;int getsum(int x , int pp){ int sum = 0 ; while(x) { sum += tree[pp][x] ; x -= x&(-x) ; } return sum ;}void update(int x , int dx , int pp){ while(x <= n) { tree[pp][x] += dx; x += x&(-x) ; }}int main(){// freopen("d:\\in.txt" , "r" ,stdin) ; int cas = 0 ; while(~scanf("%d" , &n)) { for(int i = 1;i <= n;i++) tree[0][i] = tree[1][i] = 0 ; int len = 1; int len_l = 0 ; int len_r = 0 ; for(int i = 1;i <= n;i++) { scanf("%d%d" , &a[i] , &b[i]) ; if(!a[i]) { l[len_l++] = b[i] ; r[len_r++] = b[i] + len ; len++ ; } } sort(l , l+len_l) ; len_l = unique(l , l + len_l) - l ; sort(r , r+len_r) ; len_r = unique(r , r+len_r) - r ; len = 1 ; int sum = 0 ; printf("Case #%d:\n" , ++cas) ; for(int i = 1;i <= n;i++) if(!a[i]) { int pos_l = lower_bound(l , l + len_l , b[i]) - l + 1 ; int pos_r = lower_bound(r , r + len_r , b[i]+len) - r + 1 ; int x = sum - getsum(pos_l - 1 , 0) ; int y = sum - getsum(pos_r , 1) ; update(pos_l , 1 , 0) ; update(pos_r , 1 , 1) ; ssl[len] = pos_l ; ssr[len] = pos_r ; len++ ; sum++ ; printf("%d\n" , x - y) ; } else { update(ssl[b[i]] , -1 , 0) ; update(ssr[b[i]] , -1 , 1) ; sum-- ; } }}
0 0
- hdu5372Segment Game 树状数组
- hdu4605Magic Ball Game 树状数组
- hdu5372 Segment Game 树状数组
- hdu5372 Segment Game (树状数组)
- Car race game 树状数组
- NEFU 700 Car race game 树状数组
- HDU 4605 Magic Ball Game 树状数组
- HDU 4605 Magic Ball Game 树状数组
- Magic Ball Game - HDU 4605 树状数组
- HDU 5372 Segment Game 树状数组
- 【树状数组】 HDU 5372 Segment Game
- hdu 5372 Segment Game(树状数组)
- HDU 5372 - Segment Game(树状数组)
- 【HDU 5372】Segment Game(树状数组)
- HDU 5372 Segment Game 树状数组
- HDU 5372 Segment Game(树状数组)
- CodeForces 605D Board Game(树状数组)
- hdu4605 Magic Ball Game(树状数组)
- flash乱码解决方案
- linux 内核链表(二)
- Android四大组件之Activity
- 解释器模式的一个应用
- 【LEETCODE】108-Convert Sorted Array to Binary Search Tree
- hdu5372Segment Game 树状数组
- LeetCode---Plus One
- javascript的prototype实现回调
- 不要把配置文件放到你的Git代码仓库
- linux 内核链表( 四 )
- 线程的创建 以及 线程的各种状态
- C++Primer之复合类型
- android自定义加载动画
- hdu5521 Meeting