1 solutions
-
0
容易得到当前天不能满足的时候,前天也一定不能满足,反之如果前天满足,那么前天也一定满足,所以可以二分当前天数,判断当前天是否满足.
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=1e7+10; int n,m; int r[N],d[N],s[N],t[N]; LL b[N]; bool check(int k) { for(int i=1;i<=n;i++) //计算差分 { b[i]=r[i]-r[i-1]; } for(int i=1;i<=k;i++) //处理前k个任务 { b[s[i]]-=d[i]; b[t[i]+1]+=d[i]; } LL res=0; for(int i=1;i<=n;i++) { res+=b[i]; if(res<0) return true; //某一天的任务不够 } return false; //任务可以满足 } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { cin>>r[i]; //r[i]可以使用的教室数量 } for(int i=1;i<=m;i++) { cin>>d[i]>>s[i]>>t[i];//获取第i个任务的个数,起点,终点 } int l=1,r=m; while(l<r) //枚举当前的任务个数 { int mid=l+r>>1; if(check(mid)) r=mid; //大于等于mid的都不可以 else l=mid+1; //1...mid可以满足 } if(check(r)) cout<<-1<<endl<<r; else printf("0"); return 0; }
- 1
Information
- ID
- 1098
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- # Submissions
- 1
- Accepted
- 1
- Uploaded By