| Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 80949 | sh25_zhuwy | 聪明的质监员(Day 2) | C++ | 通过 | 178 MS | 9628 KB | 1360 | 2026-01-04 15:35:57 |
#include <iostream> #include <cmath> #include <cstring> using namespace std; const int maxn = 200005; long long n, m, s; long long w[maxn], v[maxn]; long long l[maxn], r[maxn]; long long sum1[maxn], sum2[maxn]; void init(long long x) { memset(sum1, 0, sizeof(sum1)); memset(sum2, 0, sizeof(sum2)); for ( int i = 1 ; i <= n ; ++ i ) { sum1[i] = sum1[i - 1]; sum2[i] = sum2[i - 1]; if ( w[i] >= x ) { sum1[i] ++; sum2[i] += v[i]; } } } long long check(long long x) { init(x); long long ans = 0; for ( int i = 1 ; i <= m ; ++ i ) { ans += (sum1[r[i]] - sum1[l[i] - 1]) * (sum2[r[i]] - sum2[l[i] - 1]); } return ans; } int main() { cin >> n >> m >> s; for ( int i = 1 ; i <= n ; ++ i ) { cin >> w[i] >> v[i]; } for ( int i = 1 ; i <= m ; ++ i ) { cin >> l[i] >> r[i]; } long long ll = -1e12, rr = 1e12; while ( ll < rr ) { long long mid = (ll + rr + 1) / 2; if ( check(mid) >= s ) { ll = mid; }else { rr = mid - 1; } } long long tmp = min(abs(s - check(ll)), abs(s - check(ll + 1))); cout << tmp << endl; return 0; }