哪位大佬能帮我找出错误
查看原帖
哪位大佬能帮我找出错误
558844
F_DWRG楼主2022/6/5 11:13
#include <bits/stdc++.h>
using namespace std;
const long long INF=0x3f3f3f3f3f3f3f3f;
const int N=100005;
struct node
{
	long long w,h;
	int l,r;
}a[N];
int n;
long long ans[N];
int nexlow(int cur)
{
	while(1)
	{
		int l=a[cur].l,r=a[cur].r;
		if(a[l].h<a[cur].h) cur=l;
		else if(a[r].h<a[cur].h) cur=r;
		else return cur;
	}
}
void solve(int cur)
{
	int cnt=0;
	long long time=0;
	while(cnt<n)
	{
		cnt++;
		time+=a[cur].w;
		ans[cur]=time;
		int l=a[cur].l,r=a[cur].r;
		int wholow=min(a[l].h,a[r].h);
		time+=(wholow-a[cur].h-1)*a[cur].w;
		a[l].r=r;
		a[r].l=l;
		if(a[l].h<a[r].h)
		{
			a[l].w+=a[cur].w;
			cur=l;
		}
		else
		{
			a[r].w+=a[cur].w;
			cur=r;
		}
		cur=nexlow(cur);
	}
	return;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		scanf("%11d%11d",&a[i].w,&a[i].h);
	for(int i=0;i<=n+1;i++)
		a[i].l=i-1,a[i].r=i+1;
	a[0].w=a[n+1].w=1;
	a[0].l=a[n+1].l=INF;
	long long minn=INF;
	int cur=0;
	for(int i=1;i<=n;i++)
	{
		if(a[i].h<minn)
		{
			minn=a[i].h;
			cur=i;
		}
	}
	solve(cur);
	for(int i=1;i<=n;i++)
		printf("%11d\n",ans[i]);
	return 0; 
}
2022/6/5 11:13
加载中...