本人用二分答案+差分写,65分,不知道哪里有问题:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e5+10;
int n,m,k,res;
int a[N],d[N],s[N];
struct node{
int l,r;
}x[N];
int check(int mid){
int ans=0;
for(int i=1;i<=mid;i++){
d[x[i].l]++;
d[x[i].r+1]--;
}
for(int i=1;i<=n;i++){
s[i]=s[i-1]+d[i];
if(s[i]>=a[i]) ans++;
}
for(int i=1;i<=n;i++){
d[i]=0;
s[i]=0;
}
return ans;
}
signed main(){
freopen("202501C.in","r",stdin);
freopen("202501C.out","w",stdout);
cin>>n>>m>>k;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=m;i++){
cin>>x[i].l>>x[i].r;
}
int l=0,r=m;
while(l<r){
int mid=l+r+1>>1;
if(check(mid)<k) l=mid;
else if(check(mid)==k){
r=mid-1;
res=mid;
}
else r=mid-1;
}
if(res) cout<<res;
else cout<<r;
return 0;
}