比赛 |
欢乐五一练练练 |
评测结果 |
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;
}