#13WA求助
查看原帖
#13WA求助
1430250
_hud楼主2024/11/24 22:54

常规前缀和做法,不知道为什么这个点就是过不去 就很抽象

#include <bits/stdc++.h>
#define __init ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define int long long

using namespace std;

const int N = 2e5+10;
int y, n, m, s, ans, mw, w[N], v[N], sw[N], sv[N], l[N], r[N];

void solve() {
    cin >> n >> m >> s;
    ans = s;
    for(int i = 1;i <= n;i++) {
        cin >> w[i] >> v[i];
        mw = max(mw, w[i]);
    }
    for(int i = 1;i <= m;i++) cin >> l[i] >> r[i];
    int pl = 0, pr = mw, mid, f;
    while(pl < pr) {
        mid = (pl+pr) >> 1;
        memset(sv, 0, sizeof(sv));
        memset(sw, 0, sizeof(sw));
        for(int i = 1;i <= n;i++) {
            f = (w[i] >= mid);
            sv[i] = sv[i-1] + f*v[i];
            sw[i] = sw[i-1] + f;
        }
        y = 0;
        for(int i = 1;i <= m;i++)
            y += (sw[r[i]] - sw[l[i]-1]) * (sv[r[i]]- sv[l[i]-1]);
        ans = min(ans, abs(s-y));
        if(y > s) pl = mid+1;
        else if(y < s) pr = mid;
        else break;
    }
    cout << min(ans, abs(s-y));
}

signed main() {
    __init;
    solve();
    return 0;
}
2024/11/24 22:54
加载中...