30分求调
查看原帖
30分求调
945742
hexuchen楼主2025/1/22 16:43

rt,跟第一篇题解对拍半天了

#include <bits/stdc++.h>
#define int long long
#define M 2000010
using namespace std;
int n,m,s,w[M],v[M],l[M],r[M],ans=1e9,yy,sum1[M],sum2[M];
bool check(int a){
	int y=0;
	for(int i=1;i<=n;i++){
		sum1[i]=sum2[i]=0;
	}
	for(int i=1;i<=n;i++){
		if(w[i]>a){
			sum1[i]=sum1[i-1]+1;
			sum2[i]=sum2[i-1]+v[i];
		}
		else{
			sum1[i]=sum1[i-1];
			sum2[i]=sum2[i-1];
		}
	}
	for(int i=1;i<=m;i++){
		y+=(sum1[r[i]]-sum1[l[i]-1])*(sum2[r[i]]-sum2[l[i]-1]);
	}
	yy=y;
	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 le=1,r=M;
	ans=s;
	while(le<=r){
		int mid=(le+r)>>1;
		if(check(mid)){
			le=mid+1;
		}
		else{
			r=mid-1;
			ans=min(ans,abs(yy-s));
		}
	}
	cout<<ans;
	return 0;
}
/*
W=4 2*10
5 3 15 
1 5 
2 5 
3 5 
4 5 
5 5 

1 5 
2 4 
3 3 
*/
2025/1/22 16:43
加载中...