二分答案 + 前缀和。

题面中式子的意思是每一个区间$[l, r]$的贡献是这个区间内$w_i \geq W$的个数乘以这些$i$的$v_i$和。

很快发现了答案具有单调性,可以做两遍二分,分别看看小于$S$的值最大能取到多少以及大于$S$的最小能取到多少,然后取个$min$。

思考一下怎么判定,查询一个区间内比一个数大的数的个数和权值和,莫不是主席树???

被$dalao$$D$了,只要每一次都算一遍前缀和就好了,如果$w_i \geq W$就把$i$和$v_i$计入贡献,查询是$O(1)$的。

时间复杂度$O(nlogn)$。

如果是主席树还多一个$log$。

Code:

#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll; const int N = 2e5 + ;
const int Maxn = 1e6 + ;
const ll inf = 1LL << ; int n, m, w[N], sumCnt[N];
ll cur, v[N], sumVal[N]; struct Segment {
int l, r;
} seg[N]; template <typename T>
inline void read(T &X) {
X = ; char ch = ; T op = ;
for(; ch > '' || ch < ''; ch = getchar())
if(ch == '-') op = -;
for(; ch >= '' && ch <= ''; ch = getchar())
X = (X << ) + (X << ) + ch - ;
X *= op;
} inline ll solve(int mid) {
sumCnt[] = , sumVal[] = 0LL;
for(int i = ; i <= n; i++) {
sumCnt[i] = sumCnt[i - ], sumVal[i] = sumVal[i - ];
if(w[i] >= mid) ++sumCnt[i], sumVal[i] += v[i];
} ll res = 0LL;
for(int i = ; i <= m; i++)
res += 1LL * (sumCnt[seg[i].r] - sumCnt[seg[i].l - ]) * (sumVal[seg[i].r] - sumVal[seg[i].l - ]); return res;
} int main() {
read(n), read(m), read(cur);
for(int i = ; i <= n; i++)
read(w[i]), read(v[i]);
for(int i = ; i <= m; i++)
read(seg[i].l), read(seg[i].r); int ln = , rn = Maxn, mid, res = ;
for(; ln <= rn; ) {
mid = (ln + rn) / ;
if(solve(mid) <= cur) rn = mid - , res = mid;
else ln = mid + ;
} ll tmp = solve(res), ans = cur - tmp;
ln = , rn = Maxn, res = Maxn;
for(; ln <= rn; ) {
mid = (ln + rn) / ;
if(solve(mid) >= cur) ln = mid + , res = mid;
else rn = mid - ;
} tmp = solve(res);
if(tmp - cur < ans) ans = tmp - cur; printf("%lld\n", ans);
return ;
}

最新文章

  1. ffmpeg编译与移植问题
  2. c#-轮询算法
  3. asp.net 微信企业号办公系统-流程设计--流转条件设置(路由)
  4. 1.后台如何获取 jquery get方式的ajax的参数
  5. phalcon: queueing使用心得,需要安装相应的软体
  6. lsof作用
  7. Spring事务传播特性的浅析——事务方法嵌套调用的迷茫
  8. html label 标签的 for 属性
  9. video详解 HTML5中的视频:
  10. 转:Linux中文显示乱码?如何设置centos显示中文
  11. Windows Service 学习系列(二):C# windows服务:安装、卸载、启动和停止Windows Service几种方式
  12. 【XSY3154】入门多项式 高斯消元
  13. 通行导论-IP数据网络基础(2)
  14. appium python入门例子
  15. 访问iis出现500.21错误
  16. 再谈 javascript 数组去重
  17. 微信公众号开发之通过获取token等信息
  18. PHP 迭代器和生成器
  19. function类型(c++11)
  20. VS和Eclipse的调试功能哪个更强大?

热门文章

  1. HihoCoder1139 二分&#183;二分答案
  2. Docker-安装与部署
  3. js1
  4. Qt Creator 中的段落 注释的 快捷方法【转载】
  5. [转]200 OK (from cache) 与 304 Not Modified------没有这个规则(ETag是否移除)!!!from cache和304,请查看顶部的流程图!
  6. cpu高的问题的快速定位
  7. CSS动画复习
  8. Tomcat反带和集群
  9. 自己写的工具:把Evernote(印象笔记)的笔记导入到博客(Blog)中
  10. 【转】CSG(Closed Subscriber Group)闭合用户组