社区讨论
95PTS求助
P1083[NOIP 2012 提高组] 借教室参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lx5qsq41
- 此快照首次捕获于
- 2024/06/08 14:36 2 年前
- 此快照最后确认于
- 2024/06/08 18:09 2 年前
使用的是差分+二分,时间空间复杂度都能过,WA一个点(测试点8),求调
CPP#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,m,rs[N],d1[N],li[N],ri[N],ll=1,rr,mid;
long long c[N];
bool change(int l,int r,int f)
{
memset(c,0,sizeof(c));
for(int i=l;i<=r;i++)
{
c[li[i]]+=d1[i]*f;
c[ri[i]+1]-=d1[i]*f;
}
for(int i=1;i<=n;i++)
{
c[i]+=c[i-1];
if(c[i]>rs[i]) return false;
}
return true;
}
int main()
{
scanf("%d%d",&n,&m);
rr=m;
for(int i=1;i<=n;i++)
scanf("%d",&rs[i]);
for(int i=1;i<=m;i++)
scanf("%d%d%d",&d1[i],&li[i],&ri[i]);
while(ll<=rr)
{
mid=(ll+rr)>>1;
if(change(1,mid,1)) ll=mid+1;
else if(change(1,mid-1,1)) break;
else rr=mid-1;
}
if(mid==n) printf("0");
else printf("-1\n%d",mid);
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...