Cod sursă (job #356069)

Utilizator avatar FaneCelMare Steven FaneCelMare IP ascuns
Problemă Lalele (clasele 9-10) Compilator cpp | 1,49 kb
Rundă Arhiva de probleme Status evaluat
Dată 24 feb. 2018 21:12:30 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()
{
    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] += 1;
                }
                m = insert(v, x);
                v.resize(v.size()+1);
                for (i = v.size()-1; i >= m; i--) {
                    v[i+1] = v[i];
                }
                v[m] = x;
            }
        } else {
            for (j = 0; j < d; j++) {
                out << v[v.size() / 2] + 1 << endl;
                v.resize(v.size() / 2);
                for (i = 0; i < v.size(); i++) {
                    v[i] += 1;
                }
            }
        }
        n -= cd;
    }


    return 0;
}