线段树单点更新
来源:互联网 发布:遗传算法与svm 编辑:程序博客网 时间:2024/05/29 09:51
动态查询区间第k小数
其中Push表示入栈,key是不超过105的正整数;Pop表示出栈;PeekMedian表示查中值。
#include <stack>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define maxn 100000+10#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define root 1,maxn,1int sum[maxn<<2];int n;int pushUp(int rt){ sum[rt] = sum[rt<<1] + sum[rt<<1|1];}void update(int l,int r,int rt,int p,int v){ if( l == r ) { if( v )sum[rt]++; else sum[rt]--; return ; } int m = (l+r)>>1; if( p <= m )update(lson,p,v); else update(rson,p,v); pushUp(rt);}int query(int l,int r,int rt,int num){ if( l == r ) return l; int m = (l+r)>>1; if( sum[rt<<1] >= num )return query(lson,num); else return query(rson,num-sum[rt<<1]);}int main(){ cin >> n; stack<int>s; char st[100]; while( n-- ) { int flag = 1; scanf("%s",st); if( st[1] == 'u' ) { int a; scanf("%d",&a); s.push(a); update(root,a,1); } else if( st[1] == 'o' ) { if( !s.empty() ){ int a = s.top(); s.pop(); update(root,a,0); printf("%d\n",a); }else flag = 0; } else if( st[1] == 'e' ) { int x = s.size(); if(!x)flag = 0; else { x = (x+1) >> 1; printf("%d\n",query(root,x)); } } if( !flag )printf("Invalid\n"); }}
0 0
- 线段树 单点更新
- 线段树单点更新
- 线段树 单点更新
- 单点更新线段树
- 线段树单点更新
- 线段树单点更新
- 线段树 单点更新
- 线段树 单点更新
- 线段树单点更新
- 线段树 单点更新
- 单点更新线段树
- 线段树单点更新
- 线段树,单点更新
- hdu4267 线段树单点更新
- 线段树_单点更新
- hdu2795 线段树单点更新
- poj2828 线段树单点更新
- poj2828----线段树--------单点更新
- Oracle 11g的用户名和默认密码
- C语言------希尔排序
- UVa 978
- 图像处理算法(二)---图像常用颜色空间
- php 使用curl模拟ip和来源进行访问
- 线段树单点更新
- VS Code 折腾记
- typename的起源与用法
- Android实现录制视频
- C++之类外定义成员函数、inline成员函数详解
- Codeforces
- 服务器架构设计,常见问题分析
- 三次样条插值 C#代码实现
- <HDU>开始刷HDU啦!!!