0
1
mirror of https://git.sb/baoshuo/OI-codes.git synced 2024-12-25 06:11:59 +00:00

#1052. [NOIP2011 提高组] 聪明的质监员

https://sjzezoj.com/submission/53080
This commit is contained in:
Baoshuo Ren 2022-05-23 09:08:54 +08:00
parent 809517eb38
commit 00f0e61763
Signed by: baoshuo
GPG Key ID: 70F90A673FB1AB68

56
S2OJ/1052/1052.cpp Normal file
View File

@ -0,0 +1,56 @@
#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;
memset(fn, 0x00, sizeof(fn));
memset(fv, 0x00, sizeof(fv));
for (int i = 1; i <= n; i++) {
if (w[i] >= x) {
fn[i] = fn[i - 1] + 1;
fv[i] = fv[i - 1] + v[i];
} else {
fn[i] = fn[i - 1];
fv[i] = fv[i - 1];
}
}
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;
}