样例过了,但是WA
查看原帖
样例过了,但是WA
137723
pencil楼主2021/9/27 15:43
#include<iostream>
#include<string.h>
#include<cmath>
#include<stdio.h>
#include<algorithm>
const int N=100100;
//struct oi{
//	int start,time;
//};
//oi a[N];
using namespace  std;
int read(){
	int f=1,a=getchar(),x=0;
	if(a=='-') {
		f=-1;a=getchar();
	}
	while(a>='0'&&a<='9'){
		x*=10;
		x+=a-'0';
		a=getchar();
	}
	return x*f;
}
int d[N],pre[N],t[N],a[N],b[N],wait[N],zz[N];
struct oi{
	int pep=0,point,need,start;
}qwq[999999];
bool cmp(oi a,oi b){
//	return a.point*a.pep>b.point*b.pep;
return a.need>b.need;
}
int pp(int a){
	if(a>0)
	return a;
	else return 0;
}
int main(){
	int n,i,m,k;
	long long sum=0;
	cin>>n>>m>>k;
	for(i=1;i<=n;i++){
		d[i]=read();
		pre[i]+=d[i];
	}
	for(i=1;i<=m;i++){
		t[i]=read();a[i]=read();b[i]=read();
		sum+=pre[b[i]]-pre[a[i]];
		for(int op=a[i];op<b[i];op++)
		qwq[op].pep++;
//		qwq[b[i]].pep--;
//		cin>>q>>w>>e;
		wait[a[i]]=max(wait[a[i]],t[i]);
		sum+=wait[a[i]];
//		cin>>t[i]>>a[i]>>b[i];
	}
//	cout<<sum<<endl;
	for(i=1;i<=n;i++){
		qwq[i].start=i;
//		int u=qwq[i].point*qwq[i].pep;
		int u=qwq[i].pep;
		for(int j=i+1;j<=n;j++){
			if(wait[j]>=pre[j]||j==n){
				zz[i]=j;
				qwq[i].need=u;
				break;
			}
			u+=qwq[j].pep;
		}
	}
//	for(i=1;i<=m;i++){
//		qwq[i].point=zz[i]-i;
//	}
	sort(qwq+1,qwq+m+1,cmp);
	for(i=1;k;i++){
		int op=qwq[i].start+2;
		if(d[op]>=k){sum-=qwq[i].need*k;
			k=0;
//			sum-=(qwq[i].point*qwq[i].pep)*k;
				
			break;
		}
		else{
			k-=d[op];
//			sum-=(qwq[i].point*qwq[i].pep)*d[i];
			sum-=qwq[i].need*d[op];
		}
	}
	cout<<sum;
return 0;
}
2021/9/27 15:43
加载中...