95pts求调,必关
查看原帖
95pts求调,必关
1471914
shuaiwb楼主2025/8/31 20:59
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
int w[N],s[N],f[N],v[N],ll[N],rr[N],n;
void pre(int W){
	for(int i=1;i<=n;i++){
		s[i]=s[i-1],f[i]=f[i-1];
		if(w[i]>=W)s[i]++,f[i]+=v[i];
	}
}
signed main()
{
	int m,S,l=1e9+10,r=0,ans=0,res=1e12+10;
	cin>>n>>m>>S;
	for(int i=1;i<=n;i++){
		cin>>w[i]>>v[i];
		l=min(l,w[i]),r=max(r,w[i]);
	}
	for(int i=1;i<=m;i++) cin>>ll[i]>>rr[i];	
	int mid;
	while(l<r){
		mid=(l+r)>>1;
		ans=0;
		pre(mid);
		for(int i=1;i<=m;i++){
			int L=ll[i],R=rr[i];
			ans+=(s[R]-s[L-1])*(f[R]-f[L-1]);
		}
		res=min(res,abs(ans-S));
		if(ans>S)l=mid+1;
		else r=mid;
		memset(s,0,sizeof(s));
		memset(f,0,sizeof(f));
	}
	cout<<res;
}
2025/8/31 20:59
加载中...