Pagini recente » Cod sursa (job #2043235) | Cod sursa (job #1797339) | Cod sursa (job #1661301) | Cod sursa (job #1257327) | Cod sursa (job #2172758)
#include <iostream>
#include <fstream>
#define DMAX 30001
#define pozBit(x) x & (-x)
using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");
int n, v[DMAX];//data de intrare
int arbInter[DMAX*12], sumePoz[DMAX];
void incrementarePoz(int poz){//tot intervalul de la n la 1 este incrementat cu 1
for(int i = poz; i > 0; i--){
sumePoz[i] += 1;
}
}
int primul(int a, int b){
if(v[a] + sumePoz[a] < v[b] + sumePoz[b]){
return a;
}
return b;
}
void adaugareArboreInter(int pozAct, int st, int dr, int val ,int poz){
if(st == dr){
arbInter[pozAct] = val;
return;
}
int mij = (st + dr) / 2;
if(poz <= mij){
adaugareArboreInter(pozAct * 2, st, mij, val, poz);
}else{
adaugareArboreInter(pozAct * 2 + 1, mij + 1, dr, val, poz);
}
arbInter[pozAct] = primul(arbInter[pozAct * 2], arbInter[pozAct * 2 + 1]);
}
void citire(){
in >> n;
for(int i = 1; i <= n; i++){
in >> v[i];
adaugareArboreInter(1,1,n,i,i);
}
in.close();
}
void rezolvare(){
int nrTot = 0;
while(nrTot != n){
int concurent;
concurent = arbInter[1];
out << concurent << '\n';
v[concurent] = DMAX;//scot concurentul din competitie
incrementarePoz(concurent);
adaugareArboreInter(1, 1, n, concurent, concurent);
nrTot++;
}
}
int main(){
citire();
// for(int i = 1; i <= n * log2(n); i++){
// out << arbInter[i] <<' ';
// }
rezolvare();
return 0;
}