Pagini recente » Cod sursa (job #2667325) | Cod sursa (job #2377202) | Cod sursa (job #2257434) | Cod sursa (job #1501127) | Cod sursa (job #2633692)
#include <iostream>
#include <algorithm>
using namespace std;
const int DIM = (1 << 23);
int n, m, k;
int bp;
string s;
int aib[100005], t[100005], a[100005], ind[100005], poz[100005];
pair <pair <int, string>, int> v[100005];
char buff[DIM];
void read(int &n) {
n = 0;
while(buff[bp] < '0' || '9' < buff[bp])
bp++;
while('0' <= buff[bp] && buff[bp] <= '9')
n = n * 10 + buff[bp] - '0', bp++;
}
void readS(string &s) {
s = "";
while(buff[bp] < '0' || '9' < buff[bp])
bp++;
while('0' <= buff[bp] && buff[bp] <= '9')
s += buff[bp], bp++;
}
int lsb(int n) {
return n & -n;
}
void update(int ind, int val) {
for(; ind <= k; ind += lsb(ind))
aib[ind] += val;
}
int query(int ind) {
int ans = 0;
for(; ind; ind -= lsb(ind))
ans += aib[ind];
return ans;
}
int main() {
freopen("nums.in", "r", stdin);
freopen("nums.out", "w", stdout);
fread(buff, 1, DIM, stdin); // hmmm
read(n);
for(int i = 1; i <= n; i++) {
read(t[i]);
if(t[i] == 0)
read(a[i]);
else {
readS(s);
//cout << s << "\n";
v[++m] = {{s.size(), s}, i};
}
}
sort(v + 1, v + m + 1);
for(int i = 1; i <= m; i++) {
if(v[i].first.second != v[i - 1].first.second)
ind[v[i].second] = ++k, poz[k] = i;
}
for(int i = 1; i <= n; i++) {
if(!t[i]) {
int st = 1, dr = k, mid;
while(st <= dr) {
mid = (st + dr) >> 1;
if(query(mid) >= a[i])
dr = mid - 1;
else
st = mid + 1;
}
cout << v[poz[st]].first.second << "\n";
} else {
if(ind[i])
update(ind[i], 1);
}
}
return 0;
}