Pagini recente » Cod sursa (job #1110301) | Cod sursa (job #427410) | Cod sursa (job #145927) | Cod sursa (job #2654234) | Cod sursa (job #2629822)
#include <bits/stdc++.h>
#define DIM 100010
using namespace std;
string s[DIM];
int tip[DIM],w[DIM],poz[DIM],aib[DIM];
pair <pair<int,string>, int> v[DIM];
int n,k,i;
void update (int p, int val){
for (;p<=k;p+=(p&-p))
aib[p] += val;
}
int query (int p){
int sol = 0;
for (;p;p-=(p&-p))
sol += aib[p];
return sol;
}
int main (){
ifstream cin ("nums.in");
ofstream cout ("nums.out");
cin>>n;
for (i=1;i<=n;i++){
cin>>tip[i];
if (tip[i] == 0)
cin>>w[i];
else {
cin>>s[i];
v[++k] = make_pair(make_pair(s[i].length(),s[i]),i);
}
}
sort (v+1,v+k+1);
int k2 = 1;
for (i=2;i<=k;i++)
if (v[i].first.second != v[i-1].first.second)
v[++k2] = v[i];
k = k2;
for (i=1;i<=k;i++)
poz[v[i].second] = i;
for (i=1;i<=n;i++){
if (tip[i] == 0){
int val = w[i];
int st = 1, dr = k, sol = 0;
while (st <= dr){
int mid = (st+dr)>>1;
if (query(mid) >= val){
sol = mid;
dr = mid-1;
} else st = mid+1;
}
cout<<v[sol].first.second<<"\n";
} else {
if (poz[i])
update (poz[i],1);
}
}
return 0;
}