0
1
mirror of https://git.sb/baoshuo/OI-codes.git synced 2024-11-14 18:38:47 +00:00
OI-codes/LibreOJ/2600/2600.cpp

55 lines
1.2 KiB
C++

#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::endl;
int n, m, l, r, w[200005], v[200005];
long long s, y, sum, ans, fn[200005], fv[200005];
std::pair<int, int> q[200005];
bool check(int x) {
y = sum = 0;
fn[0] = fv[0] = 0;
for (int i = 1; i <= n; i++) {
fn[i] = fn[i - 1];
fv[i] = fv[i - 1];
if (w[i] >= x) {
fn[i] += 1;
fv[i] += v[i];
}
}
for (int i = 1; i <= m; i++) {
y += (fn[q[i].second] - fn[q[i].first - 1]) * (fv[q[i].second] - fv[q[i].first - 1]);
}
sum = std::abs(y - s);
return y > s;
}
int main() {
ans = std::numeric_limits<long long>::max();
l = std::numeric_limits<int>::max();
r = std::numeric_limits<int>::min();
cin >> n >> m >> s;
for (int i = 1; i <= n; i++) {
cin >> w[i] >> v[i];
l = std::min(l, w[i]);
r = std::max(r, w[i]);
}
for (int i = 1; i <= m; i++) {
cin >> q[i].first >> q[i].second;
}
l -= 1, r += 2;
while (l <= r) {
int mid = l + r >> 1;
if (check(mid)) {
l = mid + 1;
} else {
r = mid - 1;
}
ans = std::min(ans, sum);
}
cout << ans << endl;
return 0;
}