P1314 0pts求调
  • 板块学术版
  • 楼主laoyifan
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/7/20 19:34
  • 上次更新2023/11/3 08:35:32
查看原帖
P1314 0pts求调
720017
laoyifan楼主2023/7/20 19:34

题目传送门

#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;
}

2023/7/20 19:34
加载中...