社区讨论

P1314 0pts求调

学术版参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo25fn5y
此快照首次捕获于
2023/10/23 08:18
2 年前
此快照最后确认于
2023/11/03 08:35
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll N=2e5+10;
ll n,m,s,l[N],r[N]; 
ll mi=INT_MAX,w[N],v[N];
ll c[N],mid,lef=0,rig;

void check(int mid){
	ll sum=0;
	int cnt=0;
	for(int i=1;i<=n;i++){
		if(mid<=w[i]){
			cnt++;
			c[i]=c[i-1]+v[i];
		}else c[i]=c[i-1];
		
	}
	for(int i=1;i<=m;i++){
		sum+=1ll*cnt*(c[r[i]]-c[l[i]-1]);
	}
	if(s==sum){
		cout<<0;
		exit(0);
	}
	if(abs(s-sum)<mi) mi=abs(s-sum);
	if(s>sum) rig=mid-1;
	else lef=mid+1;
}

int main(){
	cin>>n>>m>>s;
	ll ma=0;
	for(int i=1;i<=n;i++){
		cin>>w[i]>>v[i];
		ma=max(ma,w[i]);
	} 
	for(int i=1;i<=m;i++) cin>>l[i]>>r[i];
	rig=ma+1;
	while(lef<=rig){
		mid=lef+rig>>1;
		check(mid);
	}
	cout<<mi;
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...