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!
");
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!
");
78                 else
79                 {
80                     c+=s1;
81                     int o = query(c,1,N,1);
82                     printf("%d
",o);
83                 }
84             }
85         }
86     }
87     return 0;
88 }
View Code
原文地址:https://www.cnblogs.com/shangyu/p/3258341.html