0分求助
查看原帖
0分求助
1170968
WEICY123楼主2024/10/19 19:45
#include<bits/stdc++.h>
using namespace std;
const long long N=2e6+100;
long long n,m,s,q[N][3],z[N][3],ans,minn=LONG_LONG_MAX,y;
struct ks{
	long long w,v;
}a[100001];
long long check(long long mid,long long n,long long m){
	long long sum=0;
	for(int i=1;i<=n;i++){
		if(a[i].w>=mid){
			z[i][0]++;
			z[i][1]+=a[i].v;
		}
		else {
			z[i][0]=z[i-1][0];
			z[i][1]=z[i-1][1];
		}
	}
	for(int i=1;i<=m;i++){
		sum+=(z[q[i][0]][1]-z[q[i][0]-1][0])*(z[q[i][1]][1]-z[q[i][1]-1][0]);
	}
	return sum;
}
int main(){
	cin>>n>>m>>s;
	for(int i=1;i<=n;i++){
		cin>>a[i].w>>a[i].v;
	}
	for(int i=1;i<=m;i++){
		cin>>q[i][0]>>q[i][1];
	}
	int l=0,r=1000001,mid;
	while(l<=r){
		mid=l+r>>1;
		y=check(mid,n,m);
		ans=y-s;
		if(ans==0){
			cout<<0;
			return 0;
		}
		if(check(mid,n,m)>0)l=mid+1;
		else r=mid-1;
		minn=min(abs(ans),minn);
	}
	cout<<minn;
}
2024/10/19 19:45
加载中...