Pagini recente » Cod sursa (job #3031432) | Cod sursa (job #2328265) | Cod sursa (job #314837) | Cod sursa (job #314629) | Cod sursa (job #1135805)
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>
#include <map>
#include <cstring>
#define DN 100003
using namespace std;
ifstream f("nums.in");
ofstream g("nums.out");
int sz,arb[4*DN],n,poz,k,S;
string v[DN];
map < string , int > mp;
bool mic(string a, string b) /// a<b ?
{
if(a.size() == b.size()){
return a < b;
}
return a.size() < b.size();
}
void update(int nod,int left,int right){
if(left == right){
++arb[nod];
return;
}
int mij = ( left + right)/2;
if( poz <= mij) update( 2*nod , left , mij);
else update(2*nod+1,mij+1,right);
arb[nod] = arb[2*nod] + arb[2*nod+1];
}
void fnd(int nod,int left,int right){
if(left == right){
g<<v[left]<<"\n";
return;
}
int mij = ( left + right)/2;
if( S + arb[2*nod] >= k){
fnd( 2*nod , left , mij);
}
else{
S+=arb[2*nod];
fnd(2*nod+1,mij+1,right);
}
arb[nod] = arb[2*nod] + arb[2*nod+1];
}
int main()
{
int m;
f>>m;
for(;m--;){
int op;
f>>op; f.get();
if(op)
getline(f,v[++sz]);
else
f>>k;
}
sort(v+1,v+sz+1,mic);
n = sz;
for(int i=1;i<=sz;++i)
mp[ v[i] ] = i;
f.close();
ifstream f("nums.in");
f>>m;
for(;m--;){
int op;
f>>op; f.get();
if(op){
string x;
getline(f,x);
poz = mp[ x ];
update(1,1,n);
}else{
f>>k;
S=0;
fnd(1,1,n);
}
}
return 0;
}