4 solutions
-
1
#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; //1...mid个任务不能满足 } else { l=mid+1; //1...mid可以满足 } } if(check(r)) { cout<<-1<<endl<<r; } else { cout<<0; } return 0; }
-
1
#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() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&r[i]); //r[i]可以使用的教室数量 } for(int i=1;i<=m;i++) { scanf("%d%d%d",&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; //1...mid个任务不能满足 else l=mid+1; //1...mid可以满足 } if(check(r)) printf("-1 \n%d",r); else printf("0"); return 0; }
-
-1
#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++) { 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() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&r[i]); } for(int i=1;i<=m;i++) { scanf("%d%d%d",&d[i],&s[i],&t[i]); } int l=1,r=m; while(l<r) { int mid=l+r>>1; if(check(mid)) r=mid; else l=mid+1; } if(check(r)) printf("-1 \n%d",r); else printf("0"); return 0; }
-
-2
#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++) { 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() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&r[i]); } for(int i=1;i<=m;i++) { scanf("%d%d%d",&d[i],&s[i],&t[i]); } int l=1,r=m; while(l<r) { int mid=l+r>>1; if(check(mid)) r=mid; else l=mid+1; } if(check(r)) printf("-1 \n%d",r); else printf("0"); return 0; }
- 1
Information
- ID
- 198
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 25
- Accepted
- 5
- Uploaded By