Pentru această operație este nevoie să te autentifici.
Cod sursă (job #356065)
Utilizator |
|
IP | ascuns |
---|---|---|---|
Problemă | Lalele (clasele 9-10) | Compilator | cpp | 2,04 kb |
Rundă | Arhiva de probleme | Status | evaluat |
Dată | 24 feb. 2018 20:37:43 | Scor | 0 |
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
vector <int> v, dd;
int insert(vector<int> &vec, int n) {
int sz = v.size();
int st = 0, dr = sz-1, m;
if (sz == 0) {
return 0;
}
while (st <= dr) {
m = (st + dr)/2;
if (v[m] == n) {
break;
}
if (v[m] < n) {
st = m + 1;
} else {
dr = m - 1;
}
}
if ((m == sz - 1) && (v[m] < n)) {
m++;
}
return m;
}
int main()
{
/*
v.push_back(9);
v.push_back(10);
v.push_back(11);
v.push_back(11);
cout << insert(v, 10) << endl;
*/
int n, d, x, i, cd, j, size, m;
ifstream in("lalele.in");
ofstream out("lalele.out");
in >> n;
v.reserve(5000000);
dd.reserve(1000000);
while (n > 0) {
in >> d;
in >> x;
cd = d;
if (x > 0) {
for (j = 0; j < d; j++) {
for (i = 0; i < v.size(); i++) {
v[i]++;
}
}
for (; d > 0; d--) {
j = x+d;
m = insert(v, j);
v.resize(v.size()+1);
for (i = v.size()-1; i >= m; i--) {
v[i+1] = v[i];
}
v[m] = j;
}
} else {
while (d > 0) {
size = v.size()-1;
for (i = 0; i < size/2; i++) {
v.pop_back();
}
dd.push_back(v[v.size()-1]);
v.pop_back();
for (i = 0; i < v.size(); i++) {
v[i]++;
}
d--;
}
for (i = 0; i < dd.size(); i++) {
out << dd[i] << endl;
}
size = dd.size();
for (i = 0; i < size; i++) {
dd.pop_back();
}
}
n -= cd;
}
return 0;
}