为什么只得了50分
查看原帖
为什么只得了50分
1294258
zhangyuexuan001楼主2024/10/26 21:49
#include<iostream>
using namespace std;
const int maxn=200010;
int w[maxn],v[maxn],l[maxn],r[maxn];
long long f[maxn],summ[maxn];
long long y,s,sum,ans=0x3f3f3f3f3f3f3f3f;
int n,m,mx=-1;
bool check(int W){	
	y=0,sum=0;
	for(int i=1;i<=n;i++){
		if(w[i]>=W){
  			f[i]=f[i-1]+1;
  			summ[i]=summ[i-1]+v[i];
  		}else{
  			f[i]=f[i-1],summ[i]=summ[i-1];
  		}
	}
	for(int i=1;i<=m;i++){
		y+=(f[r[i]]-f[l[i]-1])*(summ[r[i]]-summ[l[i]-1]);
	}
	sum=llabs(y-s);
	return y>s;
}
int main(){
	cin>>n>>m>>s; 
	for(int i=1;i<=n;i++){
		cin>>w[i]>>v[i];
		mx=max(mx,w[i]);	
	}
	for(int i=1;i<=m;i++){
		cin>>l[i]>>r[i];
	}
	int left=0,right=mx,mid;
	while(left<=right)
	{
		mid=(left+right)/2;
		if(check(mid)) {
			left=mid+1;
		}else{
			right=mid-1;
		}
		ans=max(ans,sum);
	}
	cout<<sum;
	return 0;
}
2024/10/26 21:49
加载中...