1 条题解
-
0
题目要求我们求出最小的使申请退组人数 的版本变更次数,由于版本越靠后、申请退组的人越多,所以满足二分需要的单调性,并且为了优化区间加和,我们要使用差分。
这题真的是近乎于板子了居然就俩人做出来#include<bits/stdc++.h> using namespace std; long long n,m,k,a[300005],mad[300005],lef[300005],righ[300005],l,r,mid; bool check(long long x){ long long sum=0; for(int i=1;i<=n;i++) mad[i]=0; for(int i=1;i<=x;i++) mad[lef[i]]++,mad[righ[i]+1]--; for(int i=1;i<=n;i++) mad[i]+=mad[i-1]; for(int i=1;i<=n;i++) if(mad[i]>=a[i]) sum++; return sum>=k; } int main(){ cin>>n>>m>>k; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=m;i++) cin>>lef[i]>>righ[i]; l=1,r=m; while(l<r){ mid=(l+r)/2; if(check(mid)) r=mid; else l=mid+1; } cout<<l; return 0; }
信息
- ID
- 765
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 95
- 已通过
- 17
- 上传者