KiKi's K-Number
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4144 Accepted Submission(s): 1866
Push: Push a given element e to container
Pop: Pop element of a given e from container
Query: Given two elements a and k, query the kth larger number which greater than a in container;
Although Kiki is very intelligent, she can not think of how to do it, can you help her to solve this problem?
If p is 0, then there will be an integer e (0 <e <100000), means press element e into Container.
If p is 1, then there will be an integer e (0 <e <100000), indicated that delete the element e from the container
If p is 2, then there will be two integers a and k (0 <a <100000, 0 <k <10000),means the inquiries, the element is greater than a, and the k-th larger number.
5 0 5 1 2 0 6 2 3 2 2 8 1 7 0 2 0 2 0 4 2 1 1 2 1 2 2 1 3 2 1 4
No Elment! 6 Not Find! 2 2 4 Not Find!
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define LL long long
const int N = 100000;
int sum[N+3];
int num[N+3];
int lowbit(int x)
{
return x&-x;
}
void add(int x,int y)
{
for(int i=x;i<=N;i+=lowbit(i))
{
sum[i]+=y;
}
}
int query(int x)
{
int ans=0;
for(int i=x;i>=1;i-=lowbit(i))
{
ans+=sum[i];
}
return ans;
}
void work(int a,int k)
{
if(query(N)-query(a)<k)
{
printf("Not Find!\n");
return;
}
int l=a+1,r=N;
int mid=(l+r)>>1;
while(l!=r)//注意二分的使用。
{
int now=query(mid)-query(a);
if(now>=k)
{
r=mid;
}
// else if(now==k)
// {
// while(num[mid]==0)
// {
// mid--;
// }
// printf("%d\n",mid);
// return ;
// }
else
{
// while(num[mid]==0)
// {
// mid++;
// }
l=mid+1;
}
mid=(l+r)>>1;
}
printf("%d\n",r);
}
int main()
{
int n,p,e,a,k;
while(~scanf("%d",&n))
{
memset(sum,0,sizeof sum);
memset(num,0,sizeof num);
while(n--)
{
scanf("%d",&p);
if(p==0)
{
scanf("%d",&e);
num[e]++;
add(e,1);
}
else if(p==1)
{
scanf("%d",&e);
if(num[e]==0) printf("No Elment!\n");
else num[e]--,add(e,-1);
}
else if(p==2)
{
scanf("%d%d",&a,&k);
work(a,k);
}
}
}
}
4234



被折叠的 条评论
为什么被折叠?



