比赛 欢乐五一练练练 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 借教室 最终得分 100
用户昵称 玉带林中挂 运行时间 2.252 s
代码语言 C++ 内存使用 30.83 MiB
提交时间 2017-05-01 14:34:51
显示代码纯文本
#include<iostream>  
#include<cstdio>  
#include<cstring>  
#include<algorithm>
using namespace std;  
const int lim=1000011;  
int minv[lim<<2],addv[lim<<2];  
int m,n,x,y,w;  
int a,b,c;  
  
void pushup(int o){minv[o]=min(minv[o<<1],minv[o<<1|1]);}  
  
void build(int o,int l,int r)  
{  
    if(l==r)  
    {  
        scanf("%d",&minv[o]);  
        return;  
    }  
    int m=(l+r)>>1;  
    build(o<<1,l,m);  
    build(o<<1|1,m+1,r);  
    pushup(o);  
}  
  
void pushdown(int o)  
{  
    addv[o<<1]+=addv[o];  
    addv[o<<1|1]+=addv[o];  
    minv[o<<1]+=addv[o];  
    minv[o<<1|1]+=addv[o];  
    addv[o]=0;  
}  
  
void add(int o,int l,int r)  
{  
    if(l>=x&&r<=y)  
    {  
        addv[o]+=w;  
        minv[o]+=w;  
        return;  
    }  
    pushdown(o);  
    int m=(l+r)>>1;  
    if(x<=m)add(o<<1,l,m);  
    if(y>m)add(o<<1|1,m+1,r);  
    pushup(o);  
}  
  
int main()  
{  
    freopen("classrooms.in","r",stdin);
	freopen("classrooms.out","w",stdout);  
    scanf("%d%d",&m,&n);  
    build(1,1,m);  
    for(a=1;a<=n;a++)  
    {  
        scanf("%d%d%d",&w,&x,&y);  
        w=-w;  
        add(1,1,m);  
        if(minv[1]<0)  
        {  
            cout<<-1<<'\n'<<a<<'\n';  
            return 0;  
        }  
    }  
    cout<<0<<endl; 
	fclose(stdin);fclose(stdout); 
    return 0;  
}