提交时间:2026-06-12 15:38:16
运行 ID: 91377
#include<bits/stdc++.h> using namespace std; int N,M,K; struct passenger { int start,end; }pas[100005]; struct station { int off,latest,arrive; }sta[1005]; int Dist[1005]; int main() { scanf("%d%d%d",&N,&M,&K); for(register int i=1;i<N;++i) scanf("%d",&Dist[i]); int t; for(register int i=1;i<=M;++i) { scanf("%d%d%d",&pas[i].start,&t,&pas[i].end); sta[t].latest=max(sta[t].latest,pas[i].start); sta[pas[i].end].off++; } int time=0; for(register int i=1;i<=N;++i) { sta[i].arrive=time; time=max(time,sta[i].latest); time+=Dist[i]; } int max_num,max_pos,tmp_num; while(K--) { max_num=0; for(register int i=2;i<=N;++i) { if(!Dist[i-1]) continue; tmp_num=0; for(register int j=i;j<=N;++j) { tmp_num+=sta[j].off; if(sta[j].arrive<=sta[j].latest) break; } if(tmp_num>max_num) { max_num=tmp_num; max_pos=i; } } Dist[max_pos-1]--; for(register int i=max_pos;i<=N;++i) { sta[i].arrive--; if(sta[i].arrive<sta[i].latest) break; } } int ans=0; for(register int i=1;i<=M;++i) ans+=sta[pas[i].end].arrive-pas[i].start; printf("%d",ans); return 0; }