社区讨论

WA on #2求调

P9691[GDCPC 2023] Base Station Construction参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mdd3i090
此快照首次捕获于
2025/07/21 20:41
8 个月前
此快照最后确认于
2025/11/04 03:59
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define int long long
const int M=5e5+5;
int T,n,m,a[M],q[M],pre[M];
int dp[M];
void solve()
{
	scanf("%lld",&n);
	for(int i=1;i<=n;++i) scanf("%lld",&a[i]),pre[i]=0;a[++n]=0;
	scanf("%lld",&m);
	for(int i=1;i<=m;++i)
	{
		int l,r;
		scanf("%lld%lld",&l,&r);
		pre[r+1]=max(pre[r+1],l);
	}
	pre[1]=0;
	for(int i=2;i<=n;++i) pre[i]=max(pre[i],pre[i-1]);
	int l=1,r=1;q[0]=0;
	for(int i=1;i<=n;++i)
	{
		while(l<=r&&q[l]<pre[i]) l++;
		dp[i]=dp[q[l]]+a[i];
		while(l<=r&&dp[q[r]]>=dp[i]) r--;
		q[++r]=i;
	}
	printf("%lld\n",dp[n]);
	return;
}
signed main()
{
	// freopen("data2.in","r",stdin);
	// freopen("answer.out","w",stdout);
	scanf("%lld",&T);
	while(T--) solve();
	return 0;
}

回复

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

正在加载回复...