Pagini recente » Cod sursa (job #1706253) | Cod sursa (job #1383320) | Cod sursa (job #296368) | Cod sursa (job #2140603) | Cod sursa (job #2629828)
#include <bits/stdc++.h>
#define DIM 100010
#define DIMBUFF 7000000
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,pos;
char buff[DIMBUFF];
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 get_nr (){
while (!(buff[pos] >= '0' && buff[pos] <= '9'))
++pos;
int nr = 0;
while (buff[pos] >= '0' && buff[pos] <= '9'){
nr = nr * 10 + buff[pos] - '0';
++pos;
}
return nr;
}
int main (){
FILE *fin = fopen ("nums.in","r");
ofstream fout ("nums.out");
fread (buff,1,DIMBUFF,fin);
n = get_nr();
for (i=1;i<=n;++i){
tip[i] = get_nr();
if (tip[i] == 0)
w[i] = get_nr();
else {
++pos;
while (buff[pos] >= '0' && buff[pos] <= '9'){
s[i].push_back(buff[pos]);
++pos;
}
//cin>>s[i];
v[++k] = make_pair(make_pair(s[i].length(),s[i]),i);
}
}
sort (v+1,v+k+1);
int k2 = 1;
poz[v[1].second] = 1;
for (i=2;i<=k;++i)
if (v[i].first.second != v[i-1].first.second){
++k2;
poz[v[i].second] = k2;
}
k = k2;
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;
}
fout<<v[sol].first.second<<"\n";
//fprintf(fout,"%s\n",v[sol].first.second);
} else {
if (poz[i])
update (poz[i],1);
}
}
return 0;
}