hdu2852KiKi's K-Number(区间K值)

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

区间K值写错了。。。

 1 #include <iostream>

 2 #include<cstdio>

 3 #include<cstring>

 4 #include<algorithm>

 5 #include<stdlib.h>

 6 using namespace std;

 7 #define N 100010

 8 #define lowbit(x) (x&(-x))

 9 int s[N<<2],ff[N];

10 void add(int p,int da,int l,int r,int w)

11 {

12     if(l==r)

13     {

14         s[w]+=da;

15         return ;

16     }

17     int m = (l+r)>>1;

18     if(p>m)

19     add(p,da,m+1,r,w<<1|1);

20     else

21     add(p,da,l,m,w<<1);

22     s[w] = s[w<<1]+s[w<<1|1];

23 }

24 int getsum(int a,int b,int l,int r,int w)

25 {

26     if(a<=l&&b>=r)

27        return s[w];

28     int m = (l+r)>>1,ans=0;

29     if(a<=m)

30     ans+=getsum(a,b,l,m,w<<1);

31     if(b>m)

32     ans+=getsum(a,b,m+1,r,w<<1|1);

33     return ans;

34 }

35 int query(int k,int l,int r,int w)

36 {

37     if(l==r)

38     return l;

39     int m = (l+r)>>1;

40     if(k<=s[w<<1])

41     return query(k,l,m,w<<1);

42     else

43     return query(k-s[w<<1],m+1,r,w<<1|1);

44 }

45 int main()

46 {

47     int n,a,b,c;

48     while(scanf("%d",&n)!=EOF)

49     {

50         memset(s,0,sizeof(s));

51         memset(ff,0,sizeof(ff));

52         while(n--)

53         {

54             scanf("%d",&a);

55             if(a==0)

56             {

57                 scanf("%d",&b);

58                 ff[b]++;

59                 add(b,1,1,N,1);

60             }

61             else if(a==1)

62             {

63                 scanf("%d",&b);

64                 if(ff[b]==0)

65                 printf("No Elment!\n");

66                 else

67                 {

68                     ff[b]--;

69                     add(b,-1,1,N,1);

70                 }

71             }

72             else

73             {

74                 scanf("%d%d",&b,&c);

75                 int s1 = getsum(1,b,1,N,1);

76                 if(s[1]-s1<c)

77                 printf("Not Find!\n");

78                 else

79                 {

80                     c+=s1;

81                     int o = query(c,1,N,1);

82                     printf("%d\n",o);

83                 }

84             }

85         }

86     }

87     return 0;

88 }
View Code

 

你可能感兴趣的:(number)