75求助
查看原帖
75求助
785630
YangXiaopei楼主2023/4/22 20:21
#include<bits/stdc++.h>
#define maxn 2000010
#define int long long
using namespace std;
int n, m, R, L, s, sum, w[2000005], u[2000005], r[2000005], l[2000005];
bool check(int x){
	int fw[2000005], fu[2000005];
	for(int i = 1; i <= n; i++){
	    fu[i] = fu[i - 1];
		fw[i] = fw[i - 1];
		if(w[i] >= x){
			fu[i] += u[i];
			fw[i] ++;
		}
	}
	int y = 0;
	for(int i = 1; i <= m; i++){
		y += (fw[r[i]] - fw[l[i] - 1]) * (fu[r[i]] - fu[l[i] - 1]);
	}
	sum = abs(y - s);
	if(y > s){
		return 1;
	}
	return 0;
}
signed main(){
	cin >> n >> m >> s;
	for(int i = 1; i <= n; i++){
		cin >> w[i] >> u[i];
		R = max(R, w[i]);
	}
	L = 0, R += 10;
	for(int i = 1; i <= m; i++){
		cin >> l[i] >> r[i];
	}
	int mid, ans = 1e18;
	while(L <= R){
		mid = (L + R) / 2;
		if(check(mid)){
			L = mid + 1;
		}
		else{
			R = mid - 1;
			ans = min(ans, sum);
		}
	}
	ans = min(ans, sum);
	cout << ans;
	return 0;
}
2023/4/22 20:21
加载中...