求如调,25分
查看原帖
求如调,25分
1359932
Andrecat楼主2025/1/14 20:28
#include<bits/stdc++.h>
using namespace std;
long long w[200005],v[200005],l[200005],r[200005],sc[200005],sv[200005];
int n,m,s;
long long ans=100000000000000;
int check(int ww){
    for (int i = 1; i <= n;i++){
        if(w[i]>=ww){
            sc[i] = sc[i - 1] + 1;
            sv[i] = sv[i - 1] + v[i];
        }else{
            sc[i] = sc[i - 1];
            sv[i] = sv[i - 1];
        }
    }
    long long y = 0;
    for (int i = 1; i <= m;i++){
        y += (sc[r[i]] - sc[l[i] - 1]) * (sv[r[i]] - sv[l[i] - 1]);
    }
    return y;
}
int main(){
    cin >> n >> m >> s;
    for (int i = 1; i <= n;i++){
        scanf("%lld %lld", &w[i], &v[i]);
    }
    for (int i = 1; i <= m;i++){
        scanf("%lld %lld", &l[i], &r[i]);
    }
    long long left = 1,right = 114514;
    while(right-left>1){
        int mid = (left + right) / 2;
        if(check(mid)>s){
            left = mid;
        }else{
            right = mid;
        }
    }
    cout << min(abs(check(left) - s), abs(s - check(right))) << endl;
    return 0;
}
2025/1/14 20:28
加载中...