Pagini recente » Cod sursa (job #2715691) | Cod sursa (job #914704) | Cod sursa (job #2123970) | Cod sursa (job #2475383) | Cod sursa (job #3248371)
#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;
}