http://acm.hdu.edu.cn/showproblem.php?pid=2852

区间K值写错了。。。

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define N 100010
#define lowbit(x) (x&(-x))
int s[N<<],ff[N];
void add(int p,int da,int l,int r,int w)
{
if(l==r)
{
s[w]+=da;
return ;
}
int m = (l+r)>>;
if(p>m)
add(p,da,m+,r,w<<|);
else
add(p,da,l,m,w<<);
s[w] = s[w<<]+s[w<<|];
}
int getsum(int a,int b,int l,int r,int w)
{
if(a<=l&&b>=r)
return s[w];
int m = (l+r)>>,ans=;
if(a<=m)
ans+=getsum(a,b,l,m,w<<);
if(b>m)
ans+=getsum(a,b,m+,r,w<<|);
return ans;
}
int query(int k,int l,int r,int w)
{
if(l==r)
return l;
int m = (l+r)>>;
if(k<=s[w<<])
return query(k,l,m,w<<);
else
return query(k-s[w<<],m+,r,w<<|);
}
int main()
{
int n,a,b,c;
while(scanf("%d",&n)!=EOF)
{
memset(s,,sizeof(s));
memset(ff,,sizeof(ff));
while(n--)
{
scanf("%d",&a);
if(a==)
{
scanf("%d",&b);
ff[b]++;
add(b,,,N,);
}
else if(a==)
{
scanf("%d",&b);
if(ff[b]==)
printf("No Elment!\n");
else
{
ff[b]--;
add(b,-,,N,);
}
}
else
{
scanf("%d%d",&b,&c);
int s1 = getsum(,b,,N,);
if(s[]-s1<c)
printf("Not Find!\n");
else
{
c+=s1;
int o = query(c,,N,);
printf("%d\n",o);
}
}
}
}
return ;
}
05-11 03:39