为什么5分啊,求条
查看原帖
为什么5分啊,求条
1578710
FZCmavic3pro楼主2025/7/1 10:30
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2 * 1e5 + 1;
int n, m, s;
int y;
int w[N], v[N];
int l[N], r[N];
int q1[N], q2[N];//q1:第一个式子,q2:第二个式子 
bool check(int x){
	y = 0;
	memset(q1, 0, sizeof(q1));  
	memset(q2, 0, sizeof(q2));
	for(int i = 1;i <= n;i ++){
		if(w[i] >= x){
			q1[i] = q1[i - 1] + 1;
			q2[i] = q2[i - 1] + v[i];
		}
		else{
			q1[i] = q1[i - 1];
			q2[i] = q2[i - 1];
		}
	}
	for(int i = 1;i <= m;i ++){
		y += (q1[r[i]] - q1[l[i]]) * (q2[r[i]] - q2[l[i]]);
	}
	return y > s;
}
signed 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];
	int l = 1, r = N, mid;
	int ans = s;
	while(l <= r){
		mid = l + (r - l) / 2;
		if(check(mid)){
			l = mid + 1;
		}
		else{
			r = mid - 1;
		}
		ans = min(ans, abs(s - y));
	}
	cout << ans;
	return 0;
}

2025/7/1 10:30
加载中...