WA了114514次了求助
查看原帖
WA了114514次了求助
370648
柠檬布丁吖楼主2023/2/11 21:27
#include<bits/stdc++.h>

using namespace std;

#define ll long long

const int maxn=2e5+55;
int n,m,w[maxn],v[maxn],l[maxn],r[maxn];
ll s,sn[maxn],sv[maxn],ans=1e18;

bool check(int x){
	memset(sn,0,sizeof sn);
	memset(sv,0,sizeof sv);
	for(int i=1;i<=n;i++){
		if(w[i]>=x) sn[i]=sn[i-1]+1,sv[i]=sv[i-1]+v[i];
		else sn[i]=sn[i-1];sv[i]=sv[i-1];
	}
	ll y=0;
	for(int i=1;i<=m;i++){
		y+=(sn[r[i]]-sn[l[i]-1])*(sv[r[i]]-sv[l[i]-1]);
	}
	ans=min(ans,llabs(y-s));
	return y<=s;
}

signed main(void){
	
	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 l=0,r=1e6+1;
	while(l+1<r){
		int mid=(l+r)>>1;
		if(check(mid)) r=mid;
		else l=mid;
	}
	
	cout<<ans<<endl;
	
	return 0;
}

超小声:有没有hp本子啊

2023/2/11 21:27
加载中...