首页 > 代码库 > sdut 迷之容器
sdut 迷之容器
#include <iostream>#include <algorithm>#include <string.h>#include <stdio.h>#define N 100010using namespace std;int n,tt,le;char a[N][3];int m[N],X[N];struct node{ int l,r,w;} q[4*N];void pushup(int rt){ q[rt].w=q[rt<<1].w+q[rt<<1|1].w;}void build(int l,int r,int rt){ q[rt].l=l; q[rt].r=r; q[rt].w=0; if(l==r) return ; int mid=(l+r)>>1; build(l,mid,rt<<1); build(mid+1,r,rt<<1|1);}void update(int l,int r,int rt,int key){ if(l==r&&r==key) { q[rt].w=1; return ; } int mid=(l+r)>>1; if(key<=mid) update(l,mid,rt<<1,key); else update(mid+1,r,rt<<1|1,key); pushup(rt); return ;}int query(int l,int r,int rt,int key){ if(l==r) { return l; } int mid=(l+r)>>1; if(key<=q[rt<<1].w) return query(l,mid,rt<<1,key); else return query(mid+1,r,rt<<1|1,key-q[rt<<1].w);}int main(){ while(scanf("%d",&n)!=EOF) { tt=0; for(int i=0; i<n; i++) { scanf("%s%d",a[i],&m[i]); if(a[i][0]==‘P‘) { X[tt++]=m[i]; } } sort(X,X+tt); int sum=unique(X,X+tt)-X; build(1,sum,1); for(int i=0; i<n; i++) { if(a[i][0]==‘P‘) { le=lower_bound(X,X+sum,m[i])-X+1; update(1,sum,1,le); } else if(a[i][0]==‘Q‘) { if(q[1].w<m[i]) { printf("-1\n"); } else { int tt=query(1,sum,1,m[i]); printf("%d\n",X[tt-1]); } } } } return 0;}
sdut 迷之容器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。