Pagini recente » Cod sursa (job #972656) | Cod sursa (job #93224) | Cod sursa (job #121869) | Cod sursa (job #158900) | Cod sursa (job #2188549)
#include<fstream>
#include<vector>
#include<cstring>
#include<algorithm>
#define DIM 100005
#define f first
#define s second
using namespace std;
int m, n, i, p, ii, x, j;
int aib[DIM], v[DIM], poz[DIM];
char s[DIM];
pair<int, int> q[DIM];
vector<char> nr[DIM];
ifstream fin("nums.in");
ofstream fout("nums.out");
void update(int x){
for(; x <= n; x += (x & -x)){
aib[x]++;
}
}
int cmp(int a, int b){
if(nr[a].size() != nr[b].size()){
return nr[a].size() < nr[b].size();
}
for(int i = 0; i < nr[a].size(); i++){
if(nr[a][i] != nr[b][i]){
return nr[a][i] < nr[b][i];
}
}
return a < b;
}
int egal(int a, int b){
if(nr[a].size() != nr[b].size()){
return 0;
}
for(int i = 0; i < nr[a].size(); i++){
if(nr[a][i] != nr[b][i]){
return 0;
}
}
return 1;
}
int main(){
fin>> m;
for(i = 1; i <= m; i++){
fin>> q[i].f;
if(q[i].f == 0){
fin>> q[i].s;
continue;
}
fin>> s;
x = strlen(s);
n++;
q[i].s = n;
for(j = 0; j < x; j++){
nr[n].push_back(s[j]);
}
v[n] = n;
}
sort(v + 1, v + n + 1, cmp);
x = 1;
for(i = 2; i <= n; i++){
if(egal(v[i], v[x]) == 0){
v[++x] = v[i];
}
}
n = x;
for(i = 1; i <= n; i++){
poz[ v[i] ] = i;
}
for(i = 1; i <= m; i++){
if(q[i].f == 1){
if(poz[ q[i].s ] != 0){
update(poz[ q[i].s ]);
}
continue;
}
ii = 0;
p = 1;
while(p * 2 <= n){
p *= 2;
}
while(p != 0){
if(ii + p <= n && aib[p + ii] < q[i].s){
q[i].s -= aib[p + ii];
ii += p;
}
p /= 2;
}
ii++;
for(j = 0; j < nr[ v[ii] ].size(); j++){
s[j] = nr[ v[ii] ][j];
}
s[j] = 0;
fout<< s <<"\n";
}
return 0;
}