0分求助呜呜呜
查看原帖
0分求助呜呜呜
960387
MIKASA__楼主2023/11/15 20:43

还没加上前缀和呢,光是基本的都过不了,但是样例可以过


#include <iostream>
#include <iomanip>
#include<string>
#include<queue>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;

int n, m;
long long s,ans=1000000000000;
int obj[200000][2], li[200000], ri[200000];

long long Cal(int mid) {
	long long s1 = 0;
	for (int i = 0; i < m; i++) {
		long long w = 0, v = 0;
		for (int j = li[i] - 1; j < ri[i]; j++) {
			if (obj[j][0] >= mid) {
				w ++;
				v += obj[i][1];
			}
		}
		s1 += w * v;
	}
	return s1;
}
int main()
{
	cin >> n >> m>>s;
	int l = 1000000, r = 0; 
	for (int i = 0; i < n; i++) {
		cin >> obj[i][0] >> obj[i][1];
		l = min(obj[i][0], l);
		r = max(obj[i][0], r);
	}
	for (int i = 0; i < m; i++) {
		cin >> li[i] >> ri[i];
	}
	int mid = 0;
	while (l <= r) {
		mid = (l + r) / 2;
		long long s1 = Cal(mid);
		if (s1 > s) {
			l = mid + 1;
			s1 -= s;
		}
		else {
			if (s1 < s) {
				r = mid - 1;
				s1 = s - s1;
			}
			else {
				ans = 0;
				break;
			}
		}
		ans = min(ans, s1);
	}
	cout << ans;
}

2023/11/15 20:43
加载中...