TLE求助
查看原帖
TLE求助
920843
bylgd楼主2023/5/10 18:57
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
#include<map>
#include<queue>
#include<functional>
#include<vector>
//bits/stdc++.h
using namespace std;
int m,n;
long long s;
long long Y = 0;
int w[200010], v[200010];
int l[200010], r[200010];
long long z[200010], e[200010];
bool check(int lp){
	Y=0;
	memset(z,0,sizeof(z));
	memset(e,0,sizeof (e));
	for(int i=1;i<=n;i++){
		if(w[i]>=lp){
			z[i]=z[i-1]+1;
			e[i]=e[i-1]+v[i];
		}
		else{
			z[i]=z[i-1];
			e[i]=e[i-1];
		}
	}
	for(int i=1;i<=m;i++){
		int kl=l[i],kr=r[i];
		Y+=(z[kr]-z[kl-1])*(e[kr]-e[kl-1]);
	}
	if(Y>s) return 1; 
	return 0;
}
int main(){
	cin.tie(0);
	cout.tie(0);
	cin >> m >> n;
	cin >> s;
	for(int i = 1; i <= n; i++) cin >> w[i] >> v[i];
	for(int i = 1; i <= m; i++) cin >> l[i] >> r[i];
	int ll = 0;
	int rr = 200010;
	long long ans = s;
	while(l <= r){
		int mid = ll + (rr - ll) / 2;
		if(check(mid)){
			ll = mid + 1;
		}
		else{
			rr = mid - 1;
		}
		ans=min(ans,llabs(Y-s));
	}
	cout << ans;
	return 0;
}
2023/5/10 18:57
加载中...