记录编号 |
136625 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
[NOIP 2011]聪明的质监员 |
最终得分 |
100 |
用户昵称 |
TA |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.220 s |
提交时间 |
2014-11-03 13:33:30 |
内存使用 |
15.16 MiB |
显示代码纯文本
#include<iostream>
using namespace std;
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
int s[200001],t[200001],w[200001],v[200001];
long long V[200001],sum[200001];
char *ptr=new char[10000000];
inline void in(int &x){
while(*ptr<'0'||*ptr>'9')++ptr;
x=0;
while(*ptr>47&&*ptr<58)x=x*10+*ptr++-'0';
}
inline void in(long long &x){
while(*ptr<'0'||*ptr>'9')++ptr;
x=0;
while(*ptr>47&&*ptr<58)x=x*10+*ptr++-'0';
}
int main(){
freopen("qc.in","r",stdin),freopen("qc.out","w",stdout);
fread(ptr,1,10000000,stdin);
int n,M,i,l,r=0,m;
long long S,ansl=0,ansr=0,ansm;
in(n),in(M),in(S);
for(i=1,++n;i<n;++i)
in(w[i]),in(v[i]),r=max(r,w[i]);
for(i=1;i<n;++i)
V[i]=V[i-1]+v[i];
for(i=0;i<M;++i){
in(s[i]),in(t[i]);
--s[i];
ansl+=(t[i]-s[i])*(V[t[i]]-V[s[i]]);
}
l=1,++r;
while(r-l>1){
m=(l+r)>>1,ansm=0;
for(i=1;i<n;++i)
V[i]=V[i-1]+(w[i]>=m)*v[i];
for(i=1;i<n;++i)
sum[i]=sum[i-1]+(w[i]>=m);
for(i=0;i<M;++i)
ansm+=(V[t[i]]-V[s[i]])*(sum[t[i]]-sum[s[i]]);
if(ansl>=S&&S>=ansm)
r=m,ansr=ansm;
if(ansm>=S&&S>=ansr)
l=m,ansl=ansm;
}
printf("%lld",min(abs(S-ansl),abs(S-ansr)));
return 0;
}