社区讨论

90分求调 #8wa

P3655不成熟的梦想家 (未熟 DREAMER)参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo88ow02
此快照首次捕获于
2023/10/27 14:35
2 年前
此快照最后确认于
2023/10/27 14:35
2 年前
查看原帖
C
#include<bits/stdc++.h>
using namespace std;
__int128 n,q,s,t,a[200001]={0},f[200001]={0},b=0;
__int128 read()
{
	__int128 f=1,w=0;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
		f=-1;
		ch=getchar();
	}
	while(ch<='9'&&ch>='0')
	{
		w=w*10+ch-'0';
		ch=getchar();
	}
	return f*w;
}
void print(__int128 x)
{
	if(x<0)
	{
		putchar('-');
		x=-x;
	}
	if(x>9)
	print(x/10);
	putchar(x%10+'0');
}
int main()
{
	n=read();
	q=read();
	s=read();
	t=read();
	for(__int128 i=1;i<=n+1;i++)
	{
		a[i]=read();
		f[i-1]=a[i-1]-a[i];
	}
	for(__int128 i=1;i<=n;i++)
	{
		if(f[i]<0)
		b+=f[i]*s;
		if(f[i]>0)
		b+=f[i]*t;
	}
	for(__int128 i=1;i<=q;i++)
	{
		__int128 x,y,z;
		x=read();
		y=read();
		z=read();
		x+=1;
		y+=1;
		if(x!=1)
		{
			if(f[x-1]<0)
			{
				b-=f[x-1]*s;
				if(f[x-1]-z<0)
				{
					b+=(f[x-1]-z)*s;
				}
				else
				{
					b+=(f[x-1]-z)*t;
				}
			}
			else
			{
				b-=f[x-1]*t;
				if(f[x-1]-z<0)
				{
					b+=(f[x-1]-z)*s;
				}
				else
				{
					b+=(f[x-1]-z)*t;
				}
			}
		}
		if(y!=n+1)
		{
			if(f[y]<0)
			{
				b-=f[y]*s;
				if(f[y]-z<0)
				{
					b+=(f[y]+z)*s;
				}
				else
				{
					b+=(f[y]+z)*t;
				}
			}
			else
			{
				b-=f[y]*t;
				if(f[y]-z<0)
				{
					b+=(f[y]+z)*s;
				}
				else
				{
					b+=(f[y]+z)*t;
				}
			}
		}
		f[x-1]-=z;
		f[y]+=z;
		print(b);
		cout<<endl;
	}	
}

回复

0 条回复,欢迎继续交流。

正在加载回复...