#include <stdio.h>
#include <stdlib.h>
typedef struct mdata
{
int *pTime;
int width;
int hight;
struct mdata *pre;
struct mdata *next;
}mhole;
mhole *setHole(mhole *,int ,int ,int *); //插入结点
void pourTime(mhole *cur); //计算灌水时间
void printTime(int *pTime,int N); //输出灌水时间
int main()
{
mhole *left,*right,*pt,*curHole;
int N,mCount;
int mWidth,mHight;
int *time;
left = (mhole*)malloc (sizeof(mhole)); //初始化左边界
left->width = 0;
left->hight = 1000000;
left->pTime = NULL;
left->pre = left->next = NULL;
scanf("%d",&N);
time = (int*)calloc(N,sizeof(mhole)); //time分配空间
pt = curHole = left; //当前结点,坑底位置最低结点
for(mCount = 0;mCount<N;mCount++){
scanf("%d%d",&mWidth,&mHight);
curHole = setHole(curHole,mWidth,mHight,time+mCount);
if(pt->hight > mHight) //坑底位置最低结点
pt = curHole;
}
right = setHole(curHole,0,1000000,NULL);
pourTime(pt);
printTime(time,N);
return 0;
}
mhole *setHole(mhole *preHole,int width,int hight,int *ptime)
{
mhole *curHole = (mhole *)malloc(sizeof(mhole));
curHole->width = width;
curHole->hight = hight;
curHole->pTime = ptime;
curHole->pre = preHole;
curHole->next = NULL;
preHole->next = curHole;
return curHole;
}
void pourTime(mhole * curHole)
{
mhole *cur = curHole,*pt;
int myclock = 0;
while(cur->pre->hight != cur->next->hight){
*(cur->pTime) = myclock + cur->width;
//计算当前时间,合并以灌满结点
if(cur->pre->hight > cur->next->hight){
myclock += (cur->next->hight - cur->hight)*cur->width;
cur->next->width += cur->width;
//摘下pt,释放结点
cur->pre->next = cur->next;
cur->next->pre = cur->pre;
pt = cur;
cur = cur->next;
free(pt);
}
else{
myclock += (cur->pre->hight - cur->hight)*cur->width;
cur->pre->width += cur->width;
cur->pre->next = cur->next;
cur->next->pre = cur->pre;
pt = cur;
cur = cur->pre;
free(pt);
}
//移动至下一结点,此结点为当前坑底最低位置
if(cur->hight < cur->pre->hight&&cur->hight < cur->next->hight)
continue;
else if(cur->pre->hight > cur->next->hight){ //右移
while(cur->hight > cur->next->hight)
cur = cur->next;
}else {
while(cur->hight >cur->pre->hight)
cur = cur->pre;
}
}
myclock += cur->width;
*(cur->pTime) = myclock;
}
void printTime(int *pTime,int N)
{
while(N--){
printf("%d\n",*pTime++);
}
}