Pagini recente » Cod sursa (job #1832511) | Cod sursa (job #252913) | Cod sursa (job #2178044) | Cod sursa (job #1185606) | Cod sursa (job #767561)
Cod sursa(job #767561)
#include<fstream>
#include<algorithm>
#include<tr1/unordered_map>
#include<string>
#include<vector>
using namespace std;
using namespace tr1;
#define f first
#define s second
ifstream in("nums.in");
ofstream out("nums.out");
const int N = 100100;
int n, aib[N], l;
bool ver[N];
pair<int, string> op[N];
unordered_map<string, int> h;
vector<int> norm;
inline int cmp(const int &a, const int &b) {
if(op[a].s.size() == op[b].s.size())
return op[a].s < op[b].s;
return op[a].s.size() < op[b].s.size();
}
inline void update(int poz) {
for(; poz<=l; poz += poz&(-poz))
aib[poz] += 1;
}
inline int co(const string &a) {
int i, r = 0;
for(i = 0; i!=a.size(); ++i)
r = (r * 10) + a[i] - '0';
return r;
}
inline int search(int nr) {
int i, pas = 1<<17;
for(i = 0; pas; pas>>=1)
if(i + pas <= l && nr > aib[i + pas]) {
i += pas;
nr -= aib[i];
}
return i;
}
int main() {
int i;
in >> n;
for(i = 1; i<=n; ++i) {
in >> op[i].f >> op[i].s;
if(op[i].f)
norm.push_back(i);
}
l = norm.size();
sort(norm.begin(), norm.end(), cmp);
for(i = 0; i!=norm.size(); ++i)
h[op[norm[i]].s] = i + 1;
for(i = 1; i<=n; ++i) {
if(op[i].f) {
int t = h[op[i].s];
if(!ver[t]) {
ver[t] = true;
update(t);
}
}
else {
out << op[norm[search(co(op[i].s))]].s << "\n";
}
}
return 0;
}