Pagini recente »
Istoria paginii utilizator/filip2013
|
Istoria paginii utilizator/abcdefgh
|
Istoria paginii utilizator/tudor.1234
|
Monitorul de evaluare
|
Cod sursă (job #145879)
Cod sursă (job
#145879)
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define N 5000000
int v[N],cont,split_pos;
int w[N];
void merge()
{
int i = 0, j = split_pos+1, k = 0;
while (i <= split_pos && j < cont)
if (v[i] < v[j])
w[k++] = v[i++];
else
w[k++] = v[j++];
while (i <= split_pos)
w[k++] = v[i++];
while (j < cont)
w[k++] = v[j++];
for (int i = 0; i < cont; i++)
v[i] = w[i];
}
int main()
{
FILE *fin,*fout;
fin=fopen("lalele.in","r");
fout=fopen("lalele.out","w");
int n;
fscanf(fin,"%d",&n);
int i;
for(i=0; i<n; i++)
{
int d,x;
fscanf(fin,"%d%d",&d,&x);
if(x!=0)
{
split_pos = cont-1;
while(d)
{
v[cont++]=x-i;
i++;
d--;
}
for (int i = split_pos+1; i < split_pos+1 + (cont-split_pos-1)/2; i++)
swap(v[i], v[cont-1-(i-(split_pos+1))]);
merge();
}
else
while(d)
{
cont/=2;
fprintf(fout,"%d\n",i+v[cont]);
i++;
d--;
}
i--;
}
return 0;
}