20分玄关求调!
查看原帖
20分玄关求调!
654763
smallpeople楼主2024/9/29 08:00
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 200005;

ll n,m,s,ans = 0x3f3f3f3f3f3f3f3f;
int w[N],v[N],a[N],b[N],l[N],r[N],lt = 9999999,rt;

int check(int ww)
{
	int sum = 0;
	for(int i = 1;i <= n;i ++)
	{
		a[i] = a[i - 1];
		b[i] = b[i - 1];
		if(w[i] >= ww)a[i] ++,b[i] += v[i];
	}
	for(int i = 1;i <= m;i ++)
		sum += (a[r[i]] - a[l[i] - 1]) * (b[r[i]] - b[l[i] - 1]);
	ans = min(ans,abs(s - sum));
	if(s - sum < 0)return 1;
	else return 0;
}

int main()
{
	cin>>n>>m>>s;
	for(int i = 1;i <= n;i ++)
	{
		cin>>w[i]>>v[i];
		rt = max(rt,w[i]);
		lt = min(lt,w[i]); 
	}
	for(int i = 1;i <= m;i ++)
		cin>>l[i]>>r[i];
	
	while(lt <= rt)
	{
		int mid = (lt + rt) / 2;
		if(check(mid))lt = mid + 1;
		else rt = mid - 1;
	}
	cout<<ans<<'\n';
	
	return 0;
}
2024/9/29 08:00
加载中...