水题代码求条(违规紫衫&玄关3个
  • 板块灌水区
  • 楼主Kano_zyc
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/1/5 20:28
  • 上次更新2024/1/5 22:44:25
查看原帖
水题代码求条(违规紫衫&玄关3个
1076440
Kano_zyc楼主2024/1/5 20:28

rt,这题我想用分块来做,然后全WA掉了

link

WA Code

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
typedef long long LL;
const int N=200005;

LL n,q,s,t;
LL l,r,x;
LL num,blong[N],add[N];
LL a[N];
LL ans;

int main()
{
	scanf("%lld %lld %lld %lld",&n,&q,&s,&t);
	num=sqrt(n);
	for(int i=0;i<=n;i++)
	   scanf("%lld",&a[i]);
	   
   for(int i = 1; i <= n; i ++ )
     blong[i]=ceil(i*1.0/num);
     
	while(q--)
	{
		ans=0;
		scanf("%lld %lld %lld",&l,&r,&x);
		
		   
		if(blong[l] == blong[r])
		  for(int i=l;i<=r;i++)
		   a[i]+=x;
		else
		{
			for(int i = 1;i <= num * blong[l]; i ++ )
			  a[i]+=x;
			for(int i = blong[l]+1; i < blong[r]; i ++ )
			  add[i] += x;
			for(int j = (blong[r] - 1) * num + 1;j <= r; j ++ )
			  a[j]+=x;
		}
		
		for(int i = 1;i <= n; i ++ )
		{
		    if(a[i] + add[blong[i]] > a[i - 1] + add[blong[i - 1]])
		    	ans -= (a[i] + add[blong[i]] -a[i - 1] - add[blong[i - 1]])*s;
			if(a[i] + add[blong[i]] < a[i - 1] + add[blong[i - 1]]);
				ans += (a[i - 1] + add[blong[i - 1]] - a[i] - add[blong[i]])*t;
		}
		printf("%lld\n",ans);
	}
	return 0;
}
2024/1/5 20:28
加载中...