Pagini recente » Cod sursa (job #1282840) | Cod sursa (job #1735031)
#include<fstream>
#include<algorithm>
#include<string>
#define MAXN 100010
using namespace std;
int query[MAXN],aib[MAXN],seen[MAXN];
string s[MAXN],sn[MAXN],sf[MAXN];
bool Compare(string a,string b){
if(a.size()!=b.size())
return a.size()<b.size();
return a<b;
}
int main(){
ifstream fin("nums.in");
ofstream fout("nums.out");
int i,j,n,type,strings=0,different=1,step,answer,before;
fin>>n;
for(i=1;i<=n;i++){
fin>>type;
if(type==0)
fin>>query[i];
else{
fin>>s[i];
strings++;
sn[strings]=s[i];
}
}
sort(sn+1,sn+strings+1,Compare);
sf[1]=sn[1];
for(i=2;i<=strings;i++)
if(sn[i]!=sn[i-1]){
different++;
sf[different]=sn[i];
}
for(i=1;i<=n;i++)
if(query[i]!=0){
answer=before=0;
for(step=(1<<16);step>0;step/=2)
if(answer+step<different&&before+aib[answer+step]<query[i]){
before+=aib[answer+step];
answer+=step;
}
fout<<sf[answer+1]<<'\n';
}
else{
answer=0;
for(step=(1<<16);step>0;step/=2)
if(answer+step<=different&&Compare(s[i],sf[answer+step])==0)
answer+=step;
if(seen[answer]==0){
seen[answer]=1;
for(j=answer;j<=different;j=j+((j&(j-1))^j))
aib[j]++;
}
}
return 0;
}