Cod sursa(job #3333823)

Utilizator mariusharabariMarius Harabari mariusharabari Data 15 ianuarie 2026 10:30:41
Problema Schi Scor 55
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("schi.in");
ofstream fout("schi.out");

const int AMAX = 6e4+1, NMAX = 3e4+1;

int aint[AMAX], a[NMAX], rez[NMAX];
int n, l;

void update_pos(int nod, int l, int r, int pos, int val){
    if(l==r){
        aint[nod]=val;
        rez[val]=l;
        //cout<<l<<' '<<aint[nod]<<endl;
    }
    else{
        int m=(l+r)/2;
        if(pos<=m)
            update_pos(2*nod, l, m, pos, val);
        else
            update_pos(2*nod+1, m+1, r, pos, val);
        aint[nod]=max(aint[2*nod], aint[2*nod+1]);
    }
}
void update(int nod, int l, int r, int val){
    //cout<<"i "<<l<<' '<<r<<endl;
    if(l==r){
        aint[nod]++;
        rez[aint[nod]]=l;
        //cout<<l<<' '<<aint[nod]<<endl;
    }
    else{
        int m=(l+r)/2;
        //cout<<"aint "<<aint[2*nod]<<' '<<aint[2*nod+1]<<endl;
        if(val<=aint[2*nod])
            update(2*nod, l, m, val);
        if(val<=aint[2*nod+1])
            update(2*nod+1, m+1, r, val);
        aint[nod]=max(aint[2*nod], aint[2*nod+1]);
    }
}

int main(){
    fin>>n;
    for(int i=1;i<=n;i++){
        fin>>l;
        //cout<<endl;
        //cout<<"UPDATE\n";
        update(1, 1, n, l);
        //cout<<"UPDATE_POS\n";
        update_pos(1, 1, n, i, l);
    }
    for(int i=1;i<=n;i++){
        fout<<rez[i]<<'\n';
    }
    return 0;
}