5pt求助
查看原帖
5pt求助
1321420
y15389097039楼主2024/6/8 20:37
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,S,W;
const int MAXN = 2e6+5;
int sum[MAXN],cnt[MAXN],w[MAXN],v[MAXN],r[MAXN],l[MAXN];
int check(int x) {
	memset(sum,0,sizeof(sum));
	memset(cnt,0,sizeof(cnt));
	int s = 0;
	for (int i = 1; i <= n; ++i) {
		sum[i]=sum[i-1];
		cnt[i]=cnt[i-1];
		if(w[i]>=W) {
			sum[i]+=v[i];
			cnt[i]++;
		}
	}
	for(int i = 1; i <= m; ++i) {
		s=s+(cnt[r[i]]-cnt[l[i]-1])*(sum[r[i]]-sum[l[i]-1]);
	}
	return s;
}

signed main() {
	#ifndef ONLINE_JUDGE
//	freopen("da.in","r",stdin);
	#endif
	cin >> n >> m >> S;
	for(int i = 1; i <= n; ++i) {
		cin>>w[i]>>v[i];
		W = max(W,w[i]);
	}

	for(int i = 1; i <= m; ++i) {
		cin >> l[i] >> r[i];
	}
	int lt=1,rt=W;
	int ans = 1LL<<60 ;
	while(lt<=rt) {
		int mid=(lt+rt)/2;
		int t=check(mid);
		ans=min(ans,abs(t-S));
		if(t<S) {
			rt=mid-1;
		} else {
			lt=mid+1;
		}

	}
	cout << ans;
}

R161656821

2024/6/8 20:37
加载中...