zoukankan      html  css  js  c++  java
  • luogu_P1314 聪明的质监员

    传送门:https://www.luogu.org/problem/P1314

    本SB犯得错误:

    1. 不开longlong见祖宗......
    2. 既没有在check中更新答案,又没有最后输出判断ans(l);和ans(l+1)哪个是更优的

    二分参数W,然后前缀和一下,逐个计算检验值Y。

    不开longlong见祖宗

    不开longlong见祖宗

    不开longlong见祖宗

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #define R register
    typedef long long ll;
    using namespace std;
    ll n,m,s,ql[200100],qr[200100],w[200100],v[200100],l=1e18,r=-1e18;
    ll cnt[200100];
    ll sum[200100];
    inline ll ans(ll fl){
        ll tot=0;
        memset(sum,0,sizeof(sum));memset(cnt,0,sizeof(cnt));
        for(R int i=1;i<=n;i++){
            if(w[i]>=fl) sum[i]+=v[i],cnt[i]++;
            sum[i]+=sum[i-1];cnt[i]+=cnt[i-1];
        }
        for(R int i=1;i<=m;i++){
            tot+=1ll*(sum[qr[i]]-sum[ql[i]-1])*(cnt[qr[i]]-cnt[ql[i]-1]);
        }
        return tot;
    }
    int main (){
        scanf("%lld%lld%lld",&n,&m,&s);
        for(R int i=1;i<=n;i++) scanf("%lld%lld",&w[i],&v[i]),l=min(l,w[i]),r=max(r,w[i]);
        for(R int i=1;i<=m;i++)    scanf("%lld%lld",&ql[i],&qr[i]);
        while(l<r){
            int mid=(l+r+1)>>1;
            if(ans(mid)>=s) l=mid;
            else r=mid-1;
        }
        printf("%lld
    ",min(abs(ans(l)-s),abs(ans(l+1)-s)));
        return 0;
    }
    View Code
  • 相关阅读:
    es6 Set 和Map 数据结构
    es6 Symbol
    es6 对象的扩展
    es6 class
    es6 数组扩展方法
    Docker入门01——Image
    GORM 中文文档
    将以前的文章开始慢慢转到这里发表
    环境变量
    在 Linux 中安装 VMware Tools
  • 原文地址:https://www.cnblogs.com/coclhy/p/11748670.html
Copyright © 2011-2022 走看看