记录编号 |
427726 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
[NOIP 2012]借教室 |
最终得分 |
100 |
用户昵称 |
JustWB |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.078 s |
提交时间 |
2017-07-22 23:43:17 |
内存使用 |
17.43 MiB |
显示代码纯文本
#include<cstdio>
#include<cctype>
const int maxn=1e6+5;
using namespace std;
inline int get();
int n,m;
int r[maxn],d[maxn],s[maxn],t[maxn],now[maxn];
int main()
{
freopen("classrooms.in","r",stdin);
freopen("classrooms.out","w",stdout);
n=get();m=get();
for(int i=1;i<=n;i++)r[i]=get();
for(int i=1;i<=m;i++)d[i]=get(),s[i]=get(),t[i]=get();
int l=1,rr=m;
for(;l<rr;)
{
int mid=(l+rr)>>1;
for(int ll=l;ll<=mid;ll++)now[s[ll]]+=d[ll],now[t[ll]+1]-=d[ll];
long long sum=0;bool jud=0;
for(int i=1;i<=n;i++)
{
sum+=now[i];
if(sum>r[i])
{
jud=1;
break;
}
}
if(!jud)l=mid+1;
else
{
rr=mid;
for(int ll=l;ll<=mid;ll++)now[s[ll]]-=d[ll],now[t[ll]+1]+=d[ll];
}
}
if(l==m)printf("0");
else printf("-1\n%d",l);
return 0;
}
inline int get()
{
int t=0,j=1;char c=getchar();
while(!isdigit(c))
{
if(c=='-')j=-1;
c=getchar();
}
while(isdigit(c))
{
t=(t<<3)+(t<<1)+c-'0';
c=getchar();
}
return j*t;
}