Pagini recente » Cod sursa (job #1485445) | Cod sursa (job #1523994) | Cod sursa (job #707862) | Cod sursa (job #1952086) | Cod sursa (job #1661607)
#include <cstdio>
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <bitset>
#include <stack>
#include <iomanip>
#define MOD 1000000000
#define NMAX 100005
#define INF 0x3f3f3f3f
#define pb push_back
using namespace std;
typedef pair<int, int> pii;
ifstream fin("nums.in");
ofstream fout("nums.out");
int op[NMAX], nrOrd[NMAX], aib[NMAX], q[NMAX], n, pos[NMAX];
pair<string, int> s[NMAX];
bool used[NMAX];
inline bool comp(pair<string, int> A, pair<string, int> B) {
if(A.first.size() == B.first.size())
return A.first<B.first;
return A.first.size() < B.first.size();
}
inline int lsb(int x) { return ((x&(x-1))^x); }
inline void update_aib(int pos) {
while(pos<=n) {
aib[pos]+=1;
pos+=lsb(pos);
}
}
inline int query_aib(int pos) {
int res=0,i;
while((1<<i)<=n) i<<=1;
while(i>0) {
if((res|i)<=n) {
if(aib[res|i]<pos) {
res|=i;
pos-=aib[res];
}
}
i>>=1;
}
return res+1;
}
int main() {
int i,nrCuv=0;
fin>>n;
for(i=1;i<=n;++i) {
fin>>op[i];
if(op[i] == 1) {
fin>>s[++nrCuv].first;
s[nrCuv].second=i;
}
else fin>>q[i];
}
sort(s+1,s+nrCuv+1,comp);
for(i=1;i<=nrCuv;++i) {
if(s[i].first == s[i-1].first)
nrOrd[s[i].second]=nrOrd[s[i-1].second];
else nrOrd[s[i].second]=nrOrd[s[i-1].second]+1;
pos[nrOrd[s[i].second]]=i;
}
for(i=1;i<=n;++i) {
if(op[i] == 1) {
if(!used[nrOrd[i]]) {
used[nrOrd[i]] = 1;
update_aib(nrOrd[i]);
}
} else fout<<s[pos[query_aib(q[i])]].first<<'\n';
}
return 0;
}