求助
查看原帖
求助
1199534
ycy1124楼主2024/6/22 14:54
#include<bits/stdc++.h>
using namespace std;
struct Node{
	int x,y,k;
};
int a[200001];
Node b[200001];
//			maxx,miny
deque <Node> p,q;
bool cmp(Node x1,Node x2){
	return x1.k<x2.k;
}
int main(){
	int n,m;
	long long ans=0;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&b[i].x,&b[i].y,&b[i].k);
	}
	sort(b+1,b+m+1,cmp);
	for(int i=1;i<=m;i++){
		while(!p.empty()&&b[i].x>=p.front().x){
			p.pop_front();
		}
		if(!p.empty()&&p.front().k==b[i].k&&p.front().x>=b[i].x){
		}
		else{
			p.push_front(b[i]);
		}
		while(!q.empty()&&b[i].y<=q.front().y){
			q.pop_front();
		}
		if(!q.empty()&&q.front().k==b[i].k&&q.front().y<=b[i].y){
		}
		else{
			q.push_front(b[i]);
		}
	}
	int l=1,r=n;
	int js1=1e8+1,js2=1e8+1;
	int tmp=0;
	ans-=q.front().y;
	while(!q.empty()){
		for(int i=p.back().x;i<=r;i++){
			js1=min(a[i],js1);
		}
		r=p.back().x;
		for(int i=q.back().y;i>=l;i--){
			js2=min(a[i],js2);
		}
		l=q.back().y;
		ans+=(min(p.back().k,q.back().k)-tmp)*(js1+js2);
		tmp=min(p.back().k,q.back().k);
		//cout<<js1<<' '<<js2<<' '<<tmp<<' '<<ans<<'\n'; 
		while(!p.empty()&&p.back().k<=tmp){
			p.pop_back();
		}
		while(!q.empty()&&q.back().k<=tmp){
			q.pop_back();
		}
	}
	if(q.back().k%2==1){
		ans-=js1;
	}
	printf("%lld",8);
	return 0;
}
2024/6/22 14:54
加载中...