记录编号 324674 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOIP 2011]聪明的质监员 最终得分 100
用户昵称 Gravatar农场主 是否通过 通过
代码语言 C++ 运行时间 1.030 s
提交时间 2016-10-18 16:58:45 内存使用 76.58 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 2000001 
using namespace std;
typedef long long ll;
class poi{
public:
	int l,r;
};
poi q[maxn];
ll w[maxn];
ll v[maxn];
ll pre[maxn]={0};
ll cnt[maxn]={0};
ll n,m,s;
void read(){
	scanf("%lld%lld%lld",&n,&m,&s);
	for (int i=1;i<=n;i++){
		scanf("%lld%lld",&w[i],&v[i]);
	}
	for (int i=1;i<=m;i++){
		scanf("%d%d",&q[i].l,&q[i].r);
	}
}
ll check(ll x){
	cnt[0]=0;
	pre[0]=0;
	for (int i=1;i<=n;i++){
		pre[i]=pre[i-1];
		cnt[i]=cnt[i-1];
		if (w[i]>=x){
			pre[i]+=v[i];
			cnt[i]++;
		}
	}
	ll y=0;
	for (int i=1;i<=m;i++){
		y+=(ll)(cnt[q[i].r]-cnt[q[i].l-1])*(pre[q[i].r]-pre[q[i].l-1]);
	}
	return y;
}
ll lower_bound(ll s){
	ll l=1,r=100000000,mid,ans=ll(1)<<60;
	while(l<r){
		mid=(l+r>>1);
		if (check(mid)>s){
			l=mid+1;
		}
		else{
			r=mid;
		}
	}
	ans=abs(check(l)-s);
	l=1,r=100000000;
	while(l+1<r){
		mid=(l+r)>>1;
		if (check(mid)<s){
			r=mid-1;
		}
		else l=mid;
//		printf("%d %d %d\n",l,r,check(mid)-s);
	}
	ans=min( ans , abs ( check(r) - s ) );
	ans=min( ans , abs ( check(l) - s ) );
	return ans;
}
int main(){
	freopen("qc.in","r",stdin);
	freopen("qc.out","w",stdout);
	read();
	ll ans=lower_bound(s);
	printf("%lld",ans);
}