Cod sursa(job #3248122)

Utilizator Iustin_Mircea2010Iustin Mircea Iustin_Mircea2010 Data 10 octombrie 2024 20:53:29
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
using namespace std;
int v[30005];
int aib[60005];
int ans[60005];
int n;
void update(int i){
    while(i <= n){
        aib[i]++;
        i += i&-i;
    }
}
int query(int i){
    int ret = 0;
    while(i){
        ret += aib[i];
        i -= i&-i;
    }
    return ret;
}
int main()
{
    ifstream cin("schi.in");
    ofstream cout("schi.out");
    cin >> n;
    int s = 1;
    for(int i = 1; i <= n; i++){
        cin >> v[i];
    }
    for(int i = n; i >= 1; i--){
        int st = 0, dr = 60000;
        while(dr - st > 1){
            int mij = (st+dr)/2;
            int x = query(mij);
            if(x + v[i] <= mij){
                dr = mij;
            }
            else
                st = mij;
        }
        update(dr);
        ans[dr] = i;
    }
    int cnt = 0;
    for(int i = 1; i <= 60000; i++){
        if(ans[i]){
            cout << ans[i] << '\n';
            cnt++;
        }
        if(cnt == n)
            break;
    }
    return 0;
}