[树状数组]hdu 2852 KiKi's K-Number# +二分查找。
2012-08-10 16:24
260 查看
/** [树状数组]hdu 2852 KiKi's K-Number# +二分查找。 注意这里delete某个元素的时候只删除一个,就是说push进的每个数都是不同的。 */ #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; #define N 100001 #define lowbit(i) (i) &(-i) int b ; void add(int i,int c) { for(; i < N; i += lowbit(i)) b[i] += c; } int sum(int i) { int ans = 0; for(; i > 0; i -= lowbit(i)) ans += b[i]; return ans; } int main() { int m,p,a,k,l,r,mid,sa; while(scanf("%d",&m) == 1) { memset(b,0,sizeof(b)); while(m--) { scanf("%d",&p); if(p == 0) { scanf("%d",&a); add(a,1); } else if(p == 1) { scanf("%d",&a); k = sum(a) - sum(a-1); if(k == 0) printf("No Elment!\n"); else add(a,-1); } else { scanf("%d%d",&a,&k); sa = sum(a); r = sum(N-1) - sa; if(r < k) { printf("Not Find!\n"); continue; } l = a + 1,r = N - 1; while( l <= r) { mid = (l + r) >> 1; if(sum(mid-1) - sa < k && sum(mid) - sa >= k) { r = mid; break; } if(sum(mid)- sa < k) l = mid + 1; else r = mid; } printf("%d\n",r); } } } return 0; }
相关文章推荐
- hdu 2852 KiKi's K-Number (树状数组)
- hdu 2852 KiKi's K-Number(树状数组)
- hdu 2852 KiKi's K-Number(树状数组+二分)
- HDU 2852 KiKi's K-Number(树状数组+二分)
- HDOJ 2852 KiKi's K-Number(树状数组)
- HDU 2852 KiKi's K-Number
- hdu 2852 KiKi's K-Number
- HDU 2852 KiKi's K-Number (树状数组+二分)
- HDU 2852 KiKi's K-Number
- HDU 2852 KiKi's K-Number 树状数组
- hdu 2852 KiKi's K-Number(树状数组)
- KiKi's K-Number(树状数组+二分)
- hdu 2852 KiKi's K-Number
- hdu 2852 KiKi's K-Number(线段树)
- hdu 2852 KiKi's K-Number
- HDU 2852 KiKi's K-Number(树状数组+二分)
- HDU 2852 KiKi's K-Number 树状数组
- HDU 2852 KiKi's K-Number(线段树单点更新)
- hdu 2852 KiKi's K-Number(线段树单点更新)
- HDU 2852 KiKi's K-Number【 树状数组 二分 】