Pagini recente » Cod sursa (job #1011501) | Cod sursa (job #61411) | Cod sursa (job #47925) | Cod sursa (job #204177) | Cod sursa (job #996662)
Cod sursa(job #996662)
#include <iostream>
#include <fstream>
#include <algorithm>
#define DN 100005
using namespace std;
int v[DN],q[DN],dp[DN];
inline int lsb(int x)
{
return (x&(x-1))^x;
}
void update(int poz,int val)
{
for(;poz<=v[0];poz+=lsb(poz))
dp[poz]+=val;
}
void caut(int x)
{
int st=1,dr=v[0],rez=-1;
while(st<=dr)
{
int mij=(st+dr)/2;
if( x<= v[mij])
{
rez=mij;
dr=mij-1;
}
else
st=mij+1;
}
cout<<x<<" "<<rez<<endl;
update(rez,1);
}
int main()
{
int n;
ifstream f("nums.in");
ofstream g("nums.out");
f>>n;
for(;n;--n)
{
int op;
f>>op;
if(!op)
f>>q[++q[0]];
else
f>>v[++v[0]];
}
sort(v+1,v+v[0]+1);
f.close();
f.open("nums.in");
f>>n;
for(;n;--n)
{
int op;
f>>op;
if(!op)
{
int k,rez=0;
f>>k;
for(int bit=30;bit>=0 && k;--bit)
{
if( ( 1<<bit ) <= v[0] && dp[ rez + (1<<bit) ]<=k )
{
rez+=(1<<bit);
k-=dp[rez];
}
}
g<<v[rez]<<"\n";
}
else
{
int x;
f>>x;
caut(x);
}
}
return 0;
}