Pagini recente » Cod sursa (job #1775329) | Cod sursa (job #2357431) | Cod sursa (job #2535285) | Cod sursa (job #98711) | Cod sursa (job #2163047)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
#include <map>
using namespace std;
struct str1
{
int tip,poz;
}q[100010];
struct str
{
int poz;
string s;
}v[100010];
int aib[100010],logn,n;
map<string,bool> mp;
void update(int poz)
{
for(;poz<=n;poz+=poz&(-poz))
aib[poz]++;
}
int caut_bin(int val)
{
int poz=0;
for(int i=logn;i>=0;i--)
if(poz+(1<<i)<=n && aib[poz+(1<<i)]<val)
{
poz+=(1<<i);
val-=aib[poz];
}
return poz+1;
}
int cmp(str a,str b)
{
if(a.s.size()==b.s.size()) return a.s<b.s;
else return a.s.size()<b.s.size();
}
int main()
{
ifstream f("nums.in");
ofstream g("nums.out");
int l=0;
string s;
f>>n;
while((1<<logn)<=n) logn++;
logn--;
for(int i=1;i<=n;i++)
{
f>>q[i].tip;
if(q[i].tip==1)
{
f>>s;
if(mp[s]==1) continue;
mp[s]=1;
v[++l].s=s;
v[l].poz=i;
}
else f>>q[i].poz;
}
sort(v+1,v+l+1,cmp);
for(int i=1;i<=l;i++)
q[v[i].poz].poz=i;
for(int i=1;i<=n;i++)
if(q[i].tip==1)
{
if(q[i].poz!=0) update(q[i].poz);
}
else g<<v[caut_bin(q[i].poz)].s<<"\n";
return 0;
}