赛时想的阴间东西,看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;
}