Pagini recente » Cod sursa (job #1830954) | Cod sursa (job #3246733) | Cod sursa (job #2147555) | Cod sursa (job #302472) | Cod sursa (job #2568705)
//#include <iostream>
#include <unordered_map>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("nums.in");
ofstream cout("nums.out");
unordered_map <string,int> um;
int n,aib[100005],solutie;
bool ms(string a,string b){
if(a.size()!=b.size())
return a.size()<b.size();
int n=a.size();
for(int i=0;i<n;i++){
if(a[i]!=b[i]){
return a[i]<b[i];
}
}
}
void upd(int a,int val){
for(;a<=n;a+=(a&(-a))){
aib[a]+=val;
}
}
int que(int a){
int sol=0;
for(;a>=1;a-=(a&(-a))){
sol+=aib[a];
}
return sol;
}
bool valid(int a,int kk){
//cout<<que(a)<<"\n";
if(que(a)>=kk)
return true;
return false;
}
void cb(int st,int dr,int a){
if(st>dr)
return;
//cout<<st<<" "<<dr<<"\n";
int mid=(st+dr)/2;
//cout<<mid<<" ";
if(valid(mid,a)==true){
solutie=mid;
cb(st,mid-1,a);
}
else
cb(mid+1,dr,a);
}
int cer[100005],cont=0,k[100005];
string v[100005],f[100005];
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>cer[i];
cin.get();
if(cer[i]==1){
cin>>v[++cont];
f[cont]=v[cont];
}
else
cin>>k[i];
}
sort(f+1,f+cont+1,ms);
for(int i=1;i<=cont;i++){
um[f[i]]=i;
}
int cnt=0;
for(int i=1;i<=n;i++){
if(cer[i]==1){
++cnt;
//cout<<v[cnt]<<" "<<um[v[cnt]]<<"\n";
upd(um[v[cnt]],1);
}else{
solutie=-1;
//cout<<que()<<"\n";
cb(1,n,k[i]);
cout<<f[solutie]<<"\n";
}
}
return 0;
}