有点问题
查看原帖
有点问题
1116644
soyoanon楼主2023/12/24 19:05
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N =200010;
ll n,m,s;
ll st[N],en[N],tw[N],tv[N],maxnum=0,w[N],v[N];
ll caculate(ll mid){
	for(int i=1;i<=n;i++){
		if(w[i]>=mid) tw[i]=tw[i-1]+1,tv[i]=tv[i-1]+v[i]; 
		else tw[i]=tw[i-1],tv[i]=tv[i-1];
	}
	ll res=0;
	for(int i=1;i<=m;i++){
		res+=(tw[en[i]]-tw[st[i]-1])*(tv[en[i]]-tv[st[i]-1]);
	}
	return res;
}
int main(){
	scanf("%lld%lld%lld",&n,&m,&s);
	for (int i = 1; i <=n; i++)
	{
		scanf("%lld%lld",&w[i],&v[i]);
		maxnum=max(maxnum,w[i]);
	}
	for (int i = 1; i <=m; i++)
	{
		scanf("%lld%lld",&st[i],&en[i]);
	}
	ll l=0,r=maxnum,mid,res,minnum=1e15;
	while(l<r){
		mid=(l+r)>>1;
		res=caculate(mid);
		ll tt=s-res;
		if(0>=tt) l=mid+1;
		else r=mid;
		minnum=min(minnum,abs(tt));
	}
	printf("%lld",minnum);
	return 0;
} 

为什么上面判断条件的时候我写>=第13个点过不了写>就可以过了?题意不是>吗?

2023/12/24 19:05
加载中...