Cod sursa(job #2230698)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 11 august 2018 00:38:20
Problema Schi Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <bits/stdc++.h>
#define ll long long

using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");

const int NMAX = 30005;
int v[NMAX], n;

bool check[NMAX];

int generator() {
    srand(time(NULL));
    int n = rand() % 11;
    vector<int> d(n, 0);
    for(int i = 0; i < n; i ++) {
        int pret = rand() % (i + 1) + 1;
        d[i] = pret;
    }
    cout << n << endl;
    for(int i = 0; i < d.size(); i ++) {
        v[i + 1] = d[i];
        cout << d[i] << " ";
    }
    cout << endl;
    return n;
}

void brute(vector<int> tocomp, int n) {
    vector<int> c(n + 2, 0);
    for(int i = 1; i <= n; i ++) {
        for(int j = n; j >= v[i]; j --)
            c[j + 1] = c[j];
        c[v[i]] = i;
    }
    for(int i = 1; i <= n; i ++) {
        if(tocomp[i] != c[i])
            cout << "ATENTIE ";
        cout << tocomp[i] << " corect este " << c[i] << endl;
    }

}

int main() {

    in >> n;
    for(int i = 1; i <= n; i ++)
        in >> v[i];

   // n =  generator();
    vector<int> sol(n + 1, 0);
    for(int i = n; i >= 1; i --) {
        int nr = 0;
        for(int j = n; j > i; j --)
            if(v[j] <= v[i] + nr)
                nr ++;
        int pos = v[i] + nr;
        while(pos <= n && check[pos] == 1)
            pos ++;
        check[pos] = 1;
        sol[pos] = i;
    }
    for(int i = 1; i <= n; i ++)
        out << sol[i] << "\n";
    //brute(sol, n);
    return 0;
}