Pagini recente » Cod sursa (job #634855) | Cod sursa (job #413034) | Cod sursa (job #2584207) | Cod sursa (job #141394) | Cod sursa (job #2662048)
#include <bits/stdc++.h>
using namespace std;
ifstream in("nums.in");
ofstream out("nums.out");
const int lim=1e5+4;
pair<string,int> s[lim];
int nr[lim];
int u[lim];
int cnt;
bool mycmp(pair<string,int> a,pair<string,int> b)
{
if(a.first.size()!=b.first.size())
return a.first.size()<b.first.size();
return a.first<b.first;
}
int tree[4*lim];
void update(int nod,int l,int r,int poz)
{
if(l==r)
{
tree[nod]=1;
return ;
}
int med=(l+r)/2;
if(poz<=med) update(2*nod,l,med,poz);
else update(2*nod+1,med+1,r,poz);
tree[nod]=tree[2*nod]+tree[2*nod+1];
}
int query(int nod,int l,int r,int k)
{
if(l==r) return l;
int med=(l+r)/2;
if(tree[2*nod]>=k)
return query(2*nod,l,med,k);
return query(2*nod+1,med+1,r,k-tree[2*nod]);
}
int main()
{
int tst,t;
in>>tst;
for(int w=1;w<=tst;++w)
{
in>>t;
if(t==0)
in>>nr[w];
else in>>s[++cnt].first,
s[cnt].second=w;
}
sort(s+1,s+cnt+1,mycmp);
for(int i=1;i<=cnt;++i)
u[s[i].second]=i;
for(int w=1;w<=tst;++w)
{
if(nr[w])
out<<s[query(1,1,cnt,nr[w])].first<<'\n';
else update(1,1,cnt,u[w]);
}
return 0;
}