Pagini recente » Cod sursa (job #1781612) | Cod sursa (job #1760824) | Cod sursa (job #1162661) | Cod sursa (job #1803446) | Cod sursa (job #811316)
Cod sursa(job #811316)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
string s;
int m, x, arb[600010], L, sol, t[100010], n, q[100010], ind[100010], a[100010], p[100010], k;
string v[100010];
bool cmp(int a, int b)
{
return v[a] < v[b];
}
void add(int nod, int l, int r)
{
arb[nod]++;
if(l == r) return;
m = (l+r)/2;
if(x <= m)
{
add(nod*2, l, m);
arb[nod*2+1]++;
}
else add(nod*2+1, m+1, r);
}
void search(int nod, int l, int r)
{
if(l == r)
{
sol = l;
return;
}
m = (l+r)/2;
if(arb[2*nod] >= x) search(nod*2, l, m);
else
{
x -= arb[nod*2];
search(nod*2+1, m+1, r);
}
}
int main()
{
int i, j;
ifstream fi("nums.in");
ofstream fo("nums.out");
fi >> n;
for(i = 1; i <= n; i++)
{
fi >> t[i];
if(t[i] == 0) fi >> q[i]; else
{
fi >> s;
if(s.length() > L) L = s.length();
v[++k] = s;
ind[k] = k;
p[k] = i;
}
}
for(i = 1; i <= k; i++)
while(v[i].length() < L) v[i] = "0" + v[i];
sort(ind+1, ind+k+1, cmp);
for(i = 1; i <= k; i++) a[p[ind[i]]] = i;
for(i = 1; i <= n; i++)
if(t[i] == 0)
{
x = q[i];
search(1, 1, k);
j = 0;
while(v[ind[sol]][j] == '0') j++;
for(; j < v[ind[sol]].length(); j++)
fo << v[ind[sol]][j];
fo << "\n";
}
else
{
x = a[i];
add(1, 1, k);
}
return 0;
}