hdu 2852

来源:互联网 发布:加工中心编程简单实例 编辑:程序博客网 时间:2024/06/02 03:17
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <vector>#include <map>#include <set>#include <string>#include <cstring>#include <list>#include <queue>#include <stack>#include <cmath>using namespace std;#define PF(x) (scanf("%d",&x))#define PT(x,y) (scanf("%d%d",&x,&y))#define PR(x) (printf("%d\n",x))#define PRT(x,y)(printf("%d %d\n",x,y))#define PB(x)(scanf("%I64d",&x))#define PRB(x)(printf("%I64d\n",(x)))#define For(i,n) for(int i=0;i<(n);i++)#define CLR(ar) (memset(ar,0,sizeof(ar)))#define CLR1(ar) (memset(ar,-1,sizeof(ar)))#define PBE(x) (scanf("%I64d",&x)!=EOF)#define Max(x,y) (x)>(y)?(x):(y)#define Min(x,y) (x)>(y)?(y):(x)#define L(x) (x<<1)#define R(x) ((x<<1)|1)#define Mid(x,y) ((x+y)>>1)typedef __int64 LL;#define N 100005#define M 105#define Mod 1000#define Inf 0x7fffffffint n;int ar[N];int arr[N];int lowbit(int x){return x&(-x);}void update(int pos,int var){for(;pos<N;pos+=lowbit(pos))ar[pos]+=var;}int sums(int pos){int s= 0;for(;pos;pos-=lowbit(pos)){s+=ar[pos];}return s;}int query(int a,int k){int var = sums(a);int v = sums(N-1);if(v-var<k) return N;int l = a+1;int r = N-1;while(l<=r){int mid = Mid(l,r);int t = sums(mid);if(t-var<k) l=mid+1;else if(t-var>k) {r=mid-1;}else {if(arr[mid]>0) return mid;else r = mid-1;}}return l;}void init(){while(scanf("%d",&n)!=EOF){memset(ar,0,sizeof(ar));CLR(arr);For(i,n){int x,y,z;PF(x);switch(x){case 0:PF(y);update(y,1);arr[y]++;break;case 1:PF(y);if(arr[y]==0)puts("No Elment!");   else {update(y,-1);arr[y]--;}break;case 2:PT(x,y);int t= query(x,y);if(t==N) puts("Not Find!");else PR(t);break;}}}return ;}int main(){init();return 0;}

原创粉丝点击