记录编号 262486 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOIP 2011]聪明的质监员 最终得分 100
用户昵称 GravatarTabing010102 是否通过 通过
代码语言 C++ 运行时间 0.812 s
提交时间 2016-05-21 06:10:27 内存使用 12.31 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
typedef long long LL;
const LL maxn=200100;
LL n,m,S,mw;
LL w[maxn],v[maxn],l[maxn],r[maxn],sum[maxn],cnt[maxn];//sum前缀和,cnt个数 
LL solve(LL W){
	for(LL i=1;i<=n;i++){
		sum[i]=sum[i-1]; cnt[i]=cnt[i-1];
		if(w[i]>=W){sum[i]+=v[i]; cnt[i]++;}
	}
	LL ans=0;
	for(LL i=1;i<=m;i++) ans+=(cnt[r[i]]-cnt[l[i]-1])*(sum[r[i]]-sum[l[i]-1]);
	return ans;
}
int main(){
	ios::sync_with_stdio(false);
	freopen("qc.in","r",stdin);
	freopen("qc.out","w",stdout);
	cin>>n>>m>>S;
	for(LL i=1;i<=n;i++){
		cin>>w[i]>>v[i]; mw=max(mw,w[i]);
	}
	for(LL i=1;i<=m;i++) cin>>l[i]>>r[i];
	LL l=0,r=mw+1,mid;
	while(l<r-1){
		mid=l+(r-l)/2;
		if(solve(mid)>S) l=mid;
		else r=mid;
	}
	cout<<min(abs(solve(l)-S),abs(solve(r)-S));
	return 0;
}