记录编号 74354 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOIP 2012]借教室 最终得分 100
用户昵称 GravatarQWERTIer 是否通过 通过
代码语言 C++ 运行时间 3.428 s
提交时间 2013-10-24 22:09:10 内存使用 19.37 MiB
显示代码纯文本
#include <stdio.h>
#define maxn 1000010
#define For(i,b,e) for(int i=b; i<=e; i++)
int l[maxn],r[maxn],cap[maxn],dec[maxn],cnt[maxn]={0};
int main(){
	freopen("classrooms.in","r",stdin);
	freopen("classrooms.out","w",stdout);
	int n,m;
	scanf("%d%d",&n,&m);
	For(i,1,n)
		scanf("%d",&cap[i]);
	For(i,1,m){
		scanf("%d%d%d",&dec[i],&l[i],&r[i]);
		cnt[l[i]]+=dec[i];
		cnt[r[i]+1]-=dec[i];
	}
	int cur=m,a=0;
	For(i,1,n){
		a+=cnt[i];
		//printf(" %d %d %d\n",i,a,cap[i]);
		while(cur>=1&&a>cap[i]){
			if(i>=l[cur]&&i<=r[cur])a-=dec[cur];
			cnt[l[cur]]-=dec[cur];
			cnt[r[cur]+1]+=dec[cur];
			cur--;
		}
		//printf(" %d %d %d %d\n",i,a,cap[i],cur);
	}
	if(cur==m)
		printf("0\n");
	else
		printf("-1\n%d\n",cur+1);
	return 0;
}