Pagini recente » Cod sursa (job #370835) | Cod sursa (job #1210107) | Cod sursa (job #1941348) | Cod sursa (job #1238805) | Cod sursa (job #2881508)
#include <fstream>
#include <bitset>
#include <algorithm>
#include <cmath>
#include <stack>
#include <cstring>
#include <queue>
#include <queue>
#define Nmax 1001
using namespace std;
ifstream fin("maxim.in");
ofstream fout("maxim.out");
typedef vector < int > VI;
VI V[Nmax];
int op, x, q;
struct nod{
int info, fr, cate;
nod *st, *dr;
};
void Insert(nod * &A, int x){
if(A == NULL){
A = new nod;
A -> fr = 1;
A -> cate = 1;
A -> info = x;
A -> st = A -> dr = NULL;
}
else {
A -> cate++;
if(x < A -> info)
Insert(A -> st, x);
else
if(x > A -> info)
Insert(A -> dr, x);
else
if(A -> info == x)
A -> fr++;
}
}
int Query(nod *A, int x){
if(A -> st != NULL){
if(A -> st -> cate >= x)
return Query(A -> st, x);
else
if(x <= A -> st -> cate + A -> fr)
return A -> info;
else return Query(A -> dr, x - (A -> st -> cate + A -> fr));
}
else if(A -> fr >= x) return A->info;
else return Query(A -> dr, x - A -> fr);
}
void SRD(nod *A){
if(A != NULL) {
SRD(A -> st);
for(int i = 1; i <= A -> fr; ++i)
fout << A -> info << ' ';
SRD(A -> dr);
}
}
int main() {
nod *A = NULL;
fin >> q;
while(q--){
fin >> op >> x;
if(op == 1)
Insert(A, x);
else fout << Query(A, x) << '\n';
}
SRD(A);
return 0;
}