1 条题解

  • 2
    @ 2024-7-29 19:54:02

    题目要求我们求出最小的使申请退组人数 k\ge k 的版本变更次数,由于版本越靠后、申请退组的人越多,所以满足二分需要的单调性,并且为了优化区间加和,我们要使用差分。

    这题真的是近乎于板子了居然就俩人做出来

    #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;
    }
    
    • 1

    信息

    ID
    765
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    94
    已通过
    16
    上传者