Pagini recente » Cod sursa (job #1459029) | Cod sursa (job #1046250) | Cod sursa (job #619413) | Cod sursa (job #3173534) | Cod sursa (job #2176003)
#include <fstream>
#include <string>
#include <algorithm>
#include <map>
#define MAX 100005
using namespace std;
ifstream fi("nums.in");
ofstream fo("nums.out");
int n;
int A[MAX];
string query[MAX];
string aux[MAX];
int k;
int q[MAX];
map <string,int> cor;
bool cmp(string &a,string &b)
{
int la=a.size();
int lb=b.size();
if (la>lb)
return 0;
if (la<lb)
return 1;
for (int i=0; i<la; i++)
if (a[i]<b[i])
return 1;
else if (a[i]>b[i])
return 0;
return 1;
}
void update(int poz,int val)
{
for (int i=poz; i<MAX; i+=(i&(-i)))
A[i]+=val;
}
int sum(int poz)
{
int rez=0;
for (int i=poz; i>0; i-=(i&(-i)))
rez+=A[i];
return rez;
}
string qquery(int aaa)
{
int step,pos=0;
step=65536;
for(; step; step>>=1)
if(pos+step<=k)
if(A[pos+step]<=aaa)
{
pos+=step;
aaa-=A[pos];
}
return query[pos];
}
int main()
{
fi>>n;
for (int i=1,adev=1; i<=n && adev<=n; i++,adev++)
{
int p;
fi>>p;
if (p==0)
{
fi>>q[adev];
}
else
{
string x;
fi>>x;
//if (!cor[x])
//{
query[++k]=x;
aux[k]=query[k];
cor[x]=1;
//}
//else
//adev--;
}
}
sort(query+1,query+k+1,cmp);
for (int i=1; i<=k; i++)
cor[query[i]]=i;
int ajuns=0;
int maxim;
for (int i=1; i<=n; i++)
{
if (q[i]==0) /// nr nou
{
ajuns++;
int poz=cor[aux[ajuns]];
maxim=max(poz,maxim);
update(poz,1);
}
else /// query
{
fo<<qquery(q[i])<<"\n";
}
}
return 0;
}