Pagini recente » Cod sursa (job #687513) | Cod sursa (job #1589519) | Cod sursa (job #2220187) | Cod sursa (job #363528) | Cod sursa (job #2339897)
#include<bits/stdc++.h>
#define updType pair<pair<int,string>,int >
using namespace std;
const int maxN=(1e5)+5;
int x,op;
string s;
vector<updType> M;
int pos[maxN];
char str[maxN];
int n;
class Aint
{
private:
int v[4*maxN+5];
public:
void update(int nod,int st,int dr,int pos,int val)
{
if(st==dr)
{
v[nod]=1;
return;
}
else
{
int mid=(st+dr)>>1;
if(pos<=mid) update(nod*2,st,mid,pos,val);
else update(2*nod+1,mid+1,dr,pos,val);
v[nod]=v[2*nod]+v[2*nod+1];
}
}
int query(int nod,int st,int dr,int k)
{
if(st==dr)
return st;
int mid=(st+dr)>>1;
if(v[2*nod]>=k) return query(2*nod,st,mid,k);
else return query(2*nod+1,mid+1,dr,k-v[2*nod]);
}
}A;
int link[maxN];
ifstream fin("nums.in");
ofstream fout("nums.out");
int main()
{
fin>>n;
int y=0;
for(int i=1;i<=n;i++)
{
fin>>x;
fin>>s;
// printf("%s\n",s);
if(x==1)
M.push_back(make_pair(make_pair((int)s.size(),s),++y));
}
int cnt=1,sz=(int)M.size();
sort(M.begin(),M.end());
// cerr<<M[0].first.second<<'\n';
for(int i=0;i<sz;i++)
{
if(i)
{
if(M[i].first.first!=M[i-1].first.first)
{
cnt++;
}
else
if(M[i].first.second!=M[i-1].first.second) cnt++;
}
pos[M[i].second]=cnt;
link[cnt]=i;
}
fin.close();
ifstream fin("nums.in");
cnt=0;
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>op;
if(op==1)
{
fin>>str+1;
cnt++;
A.update(1,1,sz,pos[cnt],1);
}
else
{
int q;
fin>>q;
y=A.query(1,1,sz,q);
fout<<M[link[y]].first.second<<'\n';
}
}
return 0;
}