Cod sursa(job #2089132)

Utilizator andrei2000mAndrei Moldoveanu andrei2000m Data 16 decembrie 2017 11:04:25
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

using namespace std;
ifstream f("concurs1.in");
ofstream g("concurs1.out");
int n,arb[2000001],v[500001];
void creare(int nod,int a,int b)
{
    if(a==b) arb[nod]=1;
    else {
            int mij;
            mij=(a+b)/2;
            creare(2*nod,a,mij);
            creare(2*nod+1,mij+1,b);
            arb[nod]=arb[2*nod]+arb[2*nod+1];
         }
}
void update(int nod,int a,int b,int val)
{
    if(a==b) {g<<a<<" ";arb[nod]--;}
    else {
            int mij;
            mij=(a+b)/2;
            if(arb[2*nod]>=val) update(2*nod,a,mij,val);
            else update(2*nod+1,mij+1,b,val-arb[2*nod]);
            arb[nod]--;
         }
}
int main()
{   int i,ok=1;
    f>>n;
    creare(1,1,n);
    for(i=1;i<=n;i++)
        {f>>v[i];
        if(v[i]>n-i) ok=0;}
    if(!ok) g<<"NU ARE SOLUTIE";
    else {
            for(i=1;i<=n;i++)
                update(1,1,n,v[i]+1);
         }
    g.close();
    return 0;
}