Pagini recente » Cod sursa (job #275624) | Cod sursa (job #1216174) | Cod sursa (job #2975770) | Cod sursa (job #1375770) | Cod sursa (job #1669915)
#include <bits/stdc++.h>
#define maxN 100002
#define zeros(x) x & (-x)
using namespace std;
int n, m, aib[maxN];
bool seen[maxN];
struct num
{
string s;
int x;
}V[maxN];
struct query
{
bool ty;
int x;
}v[maxN];
int cmp(const num a, const num b)
{
if (a.s.size() == b.s.size())
return a.s < b.s;
return a.s.size() < b.s.size();
}
void add(int x)
{
int i;
for (i = x; i <= n; i += zeros(i))
++ aib[i];
}
int nthelem(int k)
{
int i = 0, p = 1 << 16;
while (p)
{
if (i + p <= n && aib[i + p] < k)
{
i += p;
k -= aib[i];
}
p /= 2;
}
return i + 1;
}
void read()
{
int i;
ifstream fin("nums.in");
fin >> n;
for (i = 1; i <= n; ++ i)
{
fin >> v[i].ty;
if (v[i].ty)
{
++ m;
fin >> V[m].s;
V[m].x = i;
}else
fin >> v[i].x;
}
}
void solve()
{
/// normalize
int i;
sort(V + 1, V + m + 1, cmp);
for (i = 1; i <= m; ++ i)
{
int j = i;
while (V[i].s == V[j].s && j <= m)
{
v[V[j].x].x = i;
++ j;
}
i = j - 1;
}
}
void write()
{
int i;
ofstream fout("nums.out");
for (i = 1; i <= n; ++ i)
if (v[i].ty)
{
if (!seen[v[i].x])
{
add(v[i].x);
seen[v[i].x] = 1;
}
}else
{
int pos = nthelem(v[i].x);
fout << V[pos].s << "\n";
}
}
int main()
{
read();
solve();
write();
return 0;
}