15pts求调,悬关
查看原帖
15pts求调,悬关
469470
EurekaStriker楼主2024/6/19 19:32

赛时想的阴间东西,看cz的题解发现思路差不多,但是不知道为什么就过不了很奇怪

#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node{
	int x,y,k;
}o[200010],now[200010];
int n,m,a[200010],cnt,temp,ans;
int before[200010],after[200010];
bool cmp(node a,node b){
	return a.k>b.k;
}
signed main(){
	cin>>n>>m;
	memset(before,0x3f,sizeof before),memset(after,0x3f,sizeof after);
	for(int i=1;i<=n;i++)
		scanf("%lld",&a[i]),before[i]=min(before[i-1],a[i]);
	for(int i=n;i>=1;i--)
		after[i]=min(after[i+1],a[i]);
	for(int i=1;i<=m;i++)
		scanf("%lld%lld%lld",&o[i].x,&o[i].y,&o[i].k);
	sort(o+1,o+m+1,cmp);
	for(int i=2;i<=m+1;i++){
		if(o[i].k==o[i-1].k)
			o[i].x=max(o[i].x,o[i-1].x),o[i].y=min(o[i].y,o[i-1].y);
		else
			now[++cnt]=o[i-1];
	}
	for(int i=1;i<=cnt;i++)
		ans+=(now[i].k-now[i+1].k)*(after[now[i].x]+before[now[i].y]),temp=max(temp,before[now[i].y]);
	cout<<ans-temp;
}
2024/6/19 19:32
加载中...