Pagini recente » Cod sursa (job #2401291) | Cod sursa (job #960487) | Album | Cod sursa (job #904992) | Cod sursa (job #1316869)
#include <fstream>
#include <algorithm>
#define Nmax 100005
using namespace std;
struct query
{
int tip,val;
string nr;
} a[Nmax];
int len,aib[Nmax],poz[Nmax],Vmax,v[Nmax];
bool fr[Nmax];
inline void Update(int poz, int val)
{
int i;
for(i=poz;i<=Vmax;i+=(i&(-i))) aib[i]+=val;
}
inline int Kth_Element(int k)
{
int sum=0,i,poz=0;
for(i=20;i>=0;--i)
{
if(poz+(1<<i)>Vmax) continue;
if(sum+aib[poz+(1<<i)]<k)
{
poz+=(1<<i);
sum+=aib[poz];
}
}
return poz+1;
}
inline bool cmp(const int A, const int B)
{
if(a[A].nr.size()<a[B].nr.size()) return true;
if(a[A].nr.size()>a[B].nr.size()) return false;
return a[A].nr<a[B].nr;
}
inline void Normalize()
{
int i;
sort(v+1,v+len+1,cmp);
a[v[1]].val=1; poz[1]=v[1];
for(i=2;i<=len;++i)
{
a[v[i]].val=a[v[i-1]].val;
if(cmp(v[i-1],v[i])) ++a[v[i]].val;
poz[a[v[i]].val]=v[i];
}
Vmax=a[v[len]].val;
}
inline int Converse(string a)
{
int i,x=0;
for(i=0;i<a.size();++i) x=x*10+a[i]-'0';
return x;
}
/// E O BULANEALA CARE NU AR TREBUI SA IA 100
/// PUR SI SIMPLU IEI UPDATE-URILE SI LE NORMALIZEZI APOI DAI CU AIB SAU AINT
int main()
{
int n,i;
ifstream fin("nums.in");
ofstream fout("nums.out");
fin>>n;
for(i=1;i<=n;++i)
{
fin>>a[i].tip>>a[i].nr;
if(a[i].tip) v[++len]=i;
}
Normalize();
for(i=1;i<=n;++i)
{
if(a[i].tip)
{
if(!fr[a[i].val])
{
Update(a[i].val,1);
fr[a[i].val]=true;
}
}
else
{
fout<<a[poz[Kth_Element(Converse(a[i].nr))]].nr<<"\n";
}
}
return 0;
}