NOIP2011 Day2 T2 聪明的质监员
来源:互联网 发布:调音师知乎 编辑:程序博客网 时间:2024/05/17 23:45
W越大,Y越小,所以可以二分W使Y接近S。
少用min、abs可以让思路更清晰。
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>using namespace std;const int maxn = 200010;int n, m, num[maxn];int mw;long long s, sum[maxn], tot;struct node1{ int w, v;} a[maxn];struct node2{ int li, ri;} b[maxn];long long judge(int x){ memset(sum, 0, sizeof(sum)); memset(num, 0, sizeof(num)); for(int i = 1; i <= n; i++){ sum[i] = sum[i-1], num[i] = num[i-1]; if(a[i].w > x){ sum[i] += a[i].v; num[i]++; } } tot = 0; for(int i = 1; i <= m; i++) tot += (sum[b[i].ri] - sum[b[i].li-1])*(num[b[i].ri] - num[b[i].li-1]); return tot;}int main(){ cin >> n >> m >> s; for(int i = 1; i <= n; i++){ cin >> a[i].w >> a[i].v; mw = max(mw, a[i].w); } for(int i = 1; i <= m; i++) cin >> b[i].li >> b[i].ri; long long ans = s; int l = 0, r = mw + 1; while(l < r){ int mid = (l+r) >> 1; long long now = judge(mid); if(now > s){ l = mid + 1; if(ans > now - s) ans = now - s; } else if(now < s){ r = mid; if(ans > s - now) ans = s - now; } else{ cout << "0" << endl; return 0; } } cout << ans << endl; return 0;}
阅读全文
0 0
- NOIP2011 day2 T2 聪明的质监员
- NOIP2011 Day2 T2 聪明的质监员
- Noip2011 Day2 T2 聪明的质监员 (二分+前缀和)
- [luogu-1314]noip2011 day2-T2聪明的质监员 题解
- [二分]NOIP2011 day2 T2 聪明的质检员
- 全国信息学奥林匹克联赛(NOIP2011)复赛 提高组 day2 T2 聪明的质监员
- noip2011 day2-2 聪明的质监员
- [NOIP2011]聪明的质监员 D2 T2 二分答案
- NOIP2011 D2 T2 聪明的质检员
- NOIP2011 聪明的质监员
- NOIP2011聪明的质监员
- [NOIP2011] 聪明的质监员
- [noip2011]聪明的质监员
- NOIP2011复赛提高组day2(A:计算系数 B:聪明的质监员 C:观光公交)
- 【二分】【Noip2011】聪明的质监员
- NOIP2011 聪明的质监员(二分)
- [NOIP2011][二分]聪明的质监员
- 【NOIP 2011 Day2 T2】聪明的质检员(二分)
- 深究js(四)——表达式
- 哲学家进餐问题C语言实现
- MySQL 系列第一天
- telnet模拟Http请求
- 数组当函数参数时,所带来的问题?
- NOIP2011 Day2 T2 聪明的质监员
- onkeydown
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 用Composer 安装 laravel框架
- D
- 修改mysql密码
- Sizeof() 详解
- 【模板】【洛谷P3370】字符串哈希
- Android入门学习笔记整理(六)