HDU 2852 KiKi's K-Number(单点更新,求值)
来源:互联网 发布:北大青鸟java视频教程 编辑:程序博客网 时间:2024/06/06 19:03
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2852
题意:0 e 往容器里翻一个数e
1 e 从容器里删除一个数e
2 a k 求第k个比a大的数
AC代码:
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>const int inf = 0x3f3f3f3f;//1061109567typedef long long LL;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn = 100003;int sum[maxn<<2];using namespace std;void pushup(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void update(int c,int p,int l,int r,int rt){ if(l == r) { if(p == 1) { if(sum[rt] >= 1) sum[rt]--;//注意这里是rt else printf("No Elment!\n"); } else sum[rt]++;//注意这里是rt return; } int m = (l+r)>>1; if(c <= m) update(c,p,lson); else update(c,p,rson); pushup(rt);}int cal(int L,int R,int l,int r,int rt)//计算出比a小的数字有多少个{ if(l >= L && r <= R) return sum[rt]; int m =(l+r)>>1; int ans = 0; if(L <= m) ans += cal(L,R,lson); if(R > m) ans += cal(L,R,rson); return ans;}void query(int q,int l,int r,int rt){ if(l == r) { printf("%d\n",l);//叶子节点的左边界即为所要求的值 return; } int m = (l+r)>>1; if(q <= sum[rt<<1]) query(q,lson); else query(q-sum[rt<<1],rson);}int main(){ int n; while(scanf("%d",&n) != EOF) { int op,a,b; memset(sum,0,sizeof(sum)); while(n--) { scanf("%d",&op); if(op == 2) { scanf("%d%d",&a,&b); int x = cal(1,a,1,maxn,1); if(x+b<=sum[1]) query(x+b,1,maxn,1); else printf("Not Find!\n"); } else { scanf("%d",&a); update(a,op,1,maxn,1); } } } return 0;}
0 0
- HDU 2852 KiKi's K-Number(单点更新,求值)
- HDU 2852 KiKi's K-Number(线段树单点更新)
- hdu 2852 KiKi's K-Number(线段树单点更新)
- HDU2852 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(树状数组+二分)
- 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(树状数组)
- CodeForces 664B Rebus (调整策略)
- CSS学习
- 遗传算法
- 【小松教你手游开发】【unity实用技能】拓展函数(给系统代码添加可直接使用的接口)
- 如何通过console口连接到交换机,并查看配置
- HDU 2852 KiKi's K-Number(单点更新,求值)
- iOS 原生态分享功能的实现
- c++学习_拷贝构造函数应用的三种情况
- 关于Assets资源目录结构管理
- C++使用ocilib访问oracle数据库
- React在ES6中的用法
- linux简单的文本合并以及tab键转换
- 操蛋的Myeclipese10.1的单个文件修改编码方式
- hdu5463(基础)