Cod sursa(job #3248371)

Utilizator vladneaguvladCristianoRonaldo vladneagu Data 11 octombrie 2024 16:16:59
Problema Order Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
queue <int> q;
int n;
int aib[1000000];
void update(int poz,int val){
    while(poz<=n){
        aib[poz]+=val;
        poz=poz+(poz&-poz);
    }
}
int query(int poz){
    int sumx=0;
    while(poz){
        sumx+=aib[poz];
        poz=poz-(poz&-poz);
    }
    return sumx;
}
int bc(int poz,int lung){
    int total=query(poz);
    while(lung>total)lung=-total;
    cout<<total<<" "<<lung<<endl;
    int st=1,dr=n;
    int ab=query(poz);
    while(st<=dr){
        int mid=(dr+st)/2;
        if(ab==query(mid)){
            update(mid,-1);
            return mid;
        }
        else if(ab<query(mid))st=mid+1;
        else dr=mid-1;
    }
    return 0;
}
int main()
{
    ifstream cin("order.in");
    ofstream cout("order.out");
    cin>>n;
    for(int i = 1; i <= n; i++){
        update(i,1);
    }
    int countx=2;
    int pozstart=2;
    while(q.size()!=n){
        int a=bc(pozstart,countx);
        q.push(a);
        countx++;
        pozstart=a;
    }
    while(q.empty()==false){
        q.pop();
    }
    return 0;
}