记录编号 136625 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOIP 2011]聪明的质监员 最终得分 100
用户昵称 GravatarTA 是否通过 通过
代码语言 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;
}