Luogu P1314 聪明的质监员 二分答案
Solution
这个范围不是二分就是结论题就是数学题...
然后再看一会差不多就可以看出来有单调性所以就可以确定二分的解法了
二分那个$W$,用前缀和$O(n+m)$的时间来求出对答案的贡献
另外求答案的那个式子我一开始看错了...然后忘记乘符合条件的个数了...
还有答案的上界要取$10^{12}$,$10^{12}$是大于$0x7ffffff$的...然后我就挂了半个小时...
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <map>
#include <set> using namespace std ; #define N 200010
#define int long long int n , m , S ;
int c[ N ] , w[ N ] , v[ N ] , s[ N ] ; struct node {
int l , r ;
} a[ N ] ; int check( int x ) {
int sum = ;
c[ ] = ; s[ ] = ;
for( int i = ; i <= n ; i ++ ) {
c[ i ] = c[ i - ] ;
s[ i ] = s[ i - ] ;
if( w[ i ] >= x ) s[ i ] ++ , c[ i ] += v[ i ] ;
}
for( int i = ; i <= m ; i ++ ) {
sum += ( c[ a[ i ].r ] - c[ a[ i ].l - ] ) * ( s[ a[ i ].r ] - s[ a[ i ].l - ] ) ;
}
return sum ;
} signed main() {
int l = , r = ;
scanf( "%lld%lld%lld" , &n , &m , &S ) ;
for( int i = ; i <= n ; i ++ ) {
scanf( "%lld%lld" , &w[ i ] , &v[ i ] ) ;
r = max( r , w[ i ] ) ;
}
for( int i = ; i <= m ; i ++ ) {
scanf( "%lld%lld" , &a[ i ].l , &a[ i ].r ) ;
}
int ans = 1e12 ;
while( l <= r ) {
int mid = ( l + r ) >> ;
int x = check( mid ) ;
if( x >= S ) l = mid + ;
else r = mid - ;
ans = min( ans , abs(x-S) ) ;
}
printf( "%lld\n" , ans ) ;
return ;
}
Luogu P1314 聪明的质监员 二分答案的更多相关文章
- Luogu P1314 聪明的质监员(二分+前缀和)
P1314 聪明的质监员 题意 题目描述 小\(T\)是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有\(n\)个矿石,从\(1\)到\(n\)逐一编号,每个矿石都有自己的重量\(w_i\) ...
- P1314 聪明的质监员 二分答案
这个题我第一反应是线段树(雾),然后看了一眼题解之后就后悔了...前缀和...然后二分答案,然后就没有然后了. 题干: 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 nnn 个矿石 ...
- luogu P1314 聪明的质监员 x
P1314 聪明的质监员(至于为什么选择这个题目,可能是我觉得比较好玩呗) 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自 ...
- 【luogu P1314 聪明的质监员】 题解
题目链接:https://www.luogu.org/problemnew/show/P1314 二分答案 但是计算区间贡献的时候 直接暴力会挂 前缀和加速 #include <cstdio&g ...
- luogu P1314 聪明的质监员
题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: 1 .给定m 个区间[L ...
- 洛谷 P1314 聪明的质监员 —— 二分
题目:https://www.luogu.org/problemnew/show/P1314 显然就是二分那个标准: 当然不能每个区间从头到尾算答案,所以要先算出每个位置被算了几次: 不知为何自己第一 ...
- [NOIp2011] luogu P1314 聪明的质监员
题目描述 点进去看吧,说的不能再清楚了. Solution 看到数据规模不难想到二分 WWW,然后用个前缀和优化一下即可.注意上下界. #include<cstdio> #include& ...
- P1314 聪明的质监员(前缀和+二分)
P1314 聪明的质监员 显然可以二分参数W 统计Y用下前缀和即可. #include<iostream> #include<cstdio> #include<cstri ...
- 洛谷P1314 聪明的质监员
P1314 聪明的质监员 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: ...
随机推荐
- 【CSS3】CSS3自学
CSS3学习网址:http://www.runoob.com/css3/css3-tutorial.html
- 腾讯云的云数据库MYSQL配置
腾讯云的云数据库MYSQL配置
- [LeetCode] 687. Longest Univalue Path_Easy tag: DFS recursive
Given a binary tree, find the length of the longest path where each node in the path has the same va ...
- 【Rewrite重定向】Nginx使用rewrite重新定向
使用nginx做重新定向. nginx参考网址:http://blog.sina.com.cn/s/blog_97688f8e0100zws5.html 语法规则: location [=|~|~*| ...
- VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)
鸡啄米在上一节教程中讲了工具栏资源及CToolBar类,本节继续讲解工具栏的相关知识,主要内容包括工具栏的创建.停靠与使用. 工具栏的使用 上一节中鸡啄米提到过,一般情况下工具栏中的按钮在菜单栏中都有 ...
- VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用)
鸡啄米在上一节中讲的是VS2010的菜单资源,本节主要讲菜单及CMenu类的使用. CMenu类的主要成员函数 MFC为菜单的操作提供了CMenu类,下面鸡啄米就常用的几个成员函数进行简单的介绍. B ...
- Linux命令: 结束命令
1)ctrl+c,退出命令 2)q,退出文件
- linux常用命令:wget 命令
wget命令用来从指定的URL下载文件.wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕.如果是服务器打断下 ...
- Java SE 基础知识(String,Array)
String 类: 1. 对于String对象的相等性判断来说,请使用equals()方法,而不是==.String的equals()是判断当前字符串与传进来的字符串的内容是否一致. 2. Strin ...
- zendstudio中加入对tpl文件的支持,用HTML Editor编辑器编辑
zendstudio中加入对tpl文件的支持,用HTML Editor编辑器编辑:ThinkPHP中默认使用的tpl在zendstudio中默认打开都是文本编辑器的,没有语法提示开发效率很低,直接设置 ...