• P1314-聪明的质检员


     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define _for(i,a,b) for(int i = (a);i < b;i ++)
     4 #define _rep(i,a,b) for(int i = (a);i > b;i --)
     5 #define INF 0x3f3f3f3f3f3f3f3f
     6 #define pb push_back
     7 #define maxn 2005390
     8 typedef long long ll;
     9 
    10 inline ll read()
    11 {
    12     ll ans = 0;
    13     char ch = getchar(), last = ' ';
    14     while(!isdigit(ch)) last = ch, ch = getchar();
    15     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
    16     if(last == '-') ans = -ans;
    17     return ans;
    18 }
    19 inline void write(ll x)
    20 {
    21     if(x < 0) x = -x, putchar('-');
    22     if(x >= 10) write(x / 10);
    23     putchar(x % 10 + '0');
    24 }
    25 ll n,m,S;
    26 ll w[maxn],v[maxn];
    27 ll L[maxn],R[maxn];
    28 ll pren[maxn],preV[maxn];
    29 ll rnt = INF;
    30 //ll MIN = INF,MAX = 0;
    31 bool C(ll d)
    32 {
    33     ll ans = 0;
    34     _for(i,1,n+1)
    35         if(w[i]>=d)
    36             pren[i] = pren[i-1]+1,preV[i] = preV[i-1]+v[i];
    37         else
    38             pren[i] = pren[i-1],preV[i] = preV[i-1];
    39 
    40     _for(i,1,m+1)
    41         ans += (pren[R[i]]-pren[L[i]-1])*(preV[R[i]]-preV[L[i]-1]);
    42     rnt = min(rnt,llabs(ans-S));
    43     if(ans > S)
    44         return true;
    45     return false;
    46 }
    47 ll solve()
    48 {
    49     ll lb = 0,ub = INF;
    50     while(lb < ub)
    51     {
    52         ll mid =  lb+(ub-lb)/2;
    53         memset(pren,0,sizeof(pren));
    54         memset(preV,0,sizeof(preV));
    55         if(C(mid)) lb = mid+1;
    56         else ub = mid;
    57     }
    58     return rnt;
    59 }
    60 int main()
    61 {
    62  //    freopen("testdata.in","r+",stdin);
    63     n = read(),m = read(),S = read();
    64     _for(i,1,n+1)
    65     {
    66         w[i] = read();
    67         v[i] = read();
    68     //    MAX = max(MAX,w[i]);
    69     //    MIN = min(MIN,w[i]);
    70     }
    71     _for(i,1,m+1)
    72     {
    73         L[i] = read();
    74         R[i] = read();
    75     }
    76     write(solve());
    77     return 0;
    78 }
  • 相关阅读:
    Chapter 23: Termination Handlers(2)Understanding Termination Handlers by Example(6)
    【原】常用HTML
    [导入]化州特产~
    [导入]又大一岁,自己祝自己生日快乐~
    [导入]新视觉LOGO~
    [导入]看清楚中国移动的新旧资费
    [导入]AJAX .NET版本之间的区别
    泛型简介
    关于MongoDB的group分组
    【javascript继承】之——原型链继承和类式继承
  • 原文地址:https://www.cnblogs.com/Asurudo/p/11614956.html
Copyright © 2020-2023  润新知