比赛 欢乐五一练练练 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 借教室 最终得分 100
用户昵称 Hyoi_0Koto 运行时间 1.405 s
代码语言 C++ 内存使用 22.96 MiB
提交时间 2017-04-28 13:33:16
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cctype>
#include<cstring>
#define ll long long
#define gys mylove
using namespace std;
const int maxn=1000000+10;
int d,s,t;
int n,m,pos;
ll a[maxn],b[maxn],sum;
int rd[maxn],rs[maxn],rt[maxn];
inline void in(int &x)
{
    x=0;int f=1;char t=getchar();
    while(!isdigit(t)){if(t=='-')f=-1;t=getchar();}
    while(isdigit(t)){x=x*10+t-48;t=getchar();}
    x*=f;
}
inline void lin(ll &x)
{
    x=0;int f=1;char t=getchar();
    while(!isdigit(t)){if(t=='-')f=-1;t=getchar();}
    while(isdigit(t)){x=x*10+t-48;t=getchar();}
    x*=f;
}
inline int div(int l,int r){
	int mid;
	while(l<=r){
		mid=(l+r)>>1;
		for(int i=1;i<=mid;i++){
			b[rs[i]]+=rd[i];
			b[rt[i]+1]-=rd[i];
		}
		for(int i=1;i<=n;i++){
			sum+=b[i];
			if(sum>a[i]){
				r=mid-1;break;
			}
			else pos++;
		}
		if(pos==n) l=mid+1;
		sum=0;pos=0;
		memset(b,0,sizeof(b));
	}
	if(l==m+1) printf("0");
	else printf("-1\n%d",l);
}
inline void work(){
	in(n);in(m);
	for(int i=1;i<=n;i++) lin(a[i]);
	for(int i=1;i<=m;i++){
		in(rd[i]);in(rs[i]);in(rt[i]);
	}
	div(0,m);
}
inline int Main(){
	freopen("classrooms.in","r",stdin);
	freopen("classrooms.out","w",stdout);
	work();
	return 0;
}
int main(){;}
int gys=Main();