聪明的质监员 2011年NOIP全国联赛提高组(二分+前缀和)
聪明的质监员
2011年NOIP全国联赛提高组
第一行包含三个整数 n,m,S,分别表示矿石的个数、区间的个数和标准值。
接下来的 n 行,每行2 个整数,中间用空格隔开,第i+1 行表示i 号矿石的重量wi 和价值vi 。
接下来的 m 行,表示区间,每行2 个整数,中间用空格隔开,第i+n+1 行表示区间[Li,Ri]的两个端点Li 和Ri。注意:不同区间可能重合或相互重叠。
输出只有一行,包含一个整数,表示所求的最小值。
5 3 15
1 5
2 5
3 5
4 5
5 5
1 5
2 4
3 3
10
当 W 选4 的时候,三个区间上检验值分别为20、5、0,这批矿产的检验结果为25,此时与标准值S 相差最小为10。
数据范围
对于 10%的数据,有1≤n,m≤10;
对于 30%的数据,有1≤n,m≤500;
对于 50%的数据,有1≤n,m≤5,000;
对于 70%的数据,有1≤n,m≤10,000;
对于 100%的数据,有1≤n,m≤200,000,0 < wi, vi≤106,0 < S≤1012,1≤Li≤Ri≤n。
/* 寻找单调性 发现W越大,Y越小 可以二分W。则问题转化为求 abs(f(W)-S)的最小值。 如何快速求f(W) 发现可以前缀和预处理,两个前缀和,一个记录大于W 的Σvi 一个记录大于W 的个数。 嗯,ans初始值往死大死大里设,不然就莫名其妙WA WA WA */ #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib>#define N 200007 #define ll long longusing namespace std; ll n,m,k,ans,cnt,S,Y; ll w[N],v[N],L[N],R[N]; ll sum[N],sum2[N];inline ll read() {ll x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f; }int main() {n=read();m=read();S=read();for(ll i=1;i<=n;i++) w[i]=read(),v[i]=read(),k=max(k,w[i]);for(ll i=1;i<=m;i++) L[i]=read(),R[i]=read();ans=999999999999999999;ll l=0,r=k+1,mid;while(l<=r){mid=l+r>>1;Y=0;for(ll i=1;i<=n;i++){if(w[i]>=mid) sum[i]=sum[i-1]+v[i],sum2[i]=sum2[i-1]+1;else sum[i]=sum[i-1],sum2[i]=sum2[i-1];} for(ll i=1;i<=m;i++)Y+=(sum[R[i]]-sum[L[i]-1])*(sum2[R[i]]-sum2[L[i]-1]);if(Y-S>=0) ans=min(ans,abs(Y-S)),l=mid+1;else ans=min(ans,abs(Y-S)),r=mid-1;}printf("%lld\n",ans);return 0; }
转载于:https://www.cnblogs.com/L-Memory/p/7732081.html
聪明的质监员 2011年NOIP全国联赛提高组(二分+前缀和)相关推荐
- 过河 2005年NOIP全国联赛提高组(离散化+dp)
1105 过河 2005年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在河上有一 ...
- 1099 字串变换 2002年NOIP全国联赛提高组
1099 字串变换 2002年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 已知有两个字串 A ...
- Codevs 1066 引水入城 2010年NOIP全国联赛提高组
1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 在一个遥远的国度 ...
- 棋盘型动态规划 之 CODE[VS] 1169 传纸条 2008年NOIP全国联赛提高组
/* 这道题要解决两个问题1)状态和状态方程2)怎么保证每走一步,所形成的路径不相交,以保证最后生成的完整路径不相交.(1)状态: dp[i][j][k][l] = 小渊传递的纸条到[i][j]的位置 ...
- codevs 1043 方格取数 2000年NOIP全国联赛提高组
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而 ...
- CODE[VS] 1098 均分纸牌 ( 2002年NOIP全国联赛提高组)
arr[i] :表示每个牌堆的纸牌的数目 平均值 :当纸牌数都一样多时,纸牌的数目从左向右考虑,每堆纸牌有三种状态: 1) arr[i] == 平均值,考虑arr[i+1] 2) arr[i] < ...
- Codevs 1066 引水入城 2010年NOIP全国联赛提高组 BFS + 贪心
Codevs 1066 引水入城 题目上没有给出样例二,只给出了样例二的图,真是奇怪(丧心病狂). Input2: 3 6 8 4 5 6 4 4 7 3 4 3 3 3 3 2 2 1 1 2 Ou ...
- 1038 一元三次方程求解 2001年NOIP全国联赛提高组
题目描述 Description 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100 ...
- 【codevs 1315】1315 摆花2012年NOIP全国联赛普及组(dp)
1315 摆花2012年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小明的花店新开张,为 ...
最新文章
- 节能信标组:让我们一起来内卷
- php启动提示缺失v9,phpcms程序v9提示“您要查看的信息不存在”怎么解决
- jwt用户注销 PHP,flask_jwt 如何实现用户注销
- Java 遍历指定目录下的所有目录
- Python Pytest装饰器@pytest.mark.parametrize多样参数化(二)
- oracle for net,使用Oracle Developer Tools For Visual Studio .NET-.NET教程,数据库应用
- .NET : 在单元测试中使用外部文件作为数据源
- 60-100-028-使用-MySQL 主从复制
- 如何向某网址Post信息,并得到CookieContainer以便以后直接通过验证
- 敏捷脑图用例实践之路
- 抖音网红mac桌宠Desktop Goose呆头鹅的使用教程
- 神经网络与深度学习2
- [Android]OkHttp的简单封装-辅助框架
- Windows server 2016 安装小度WiFi网卡驱动
- 捷顺USB-RS485驱动
- Questasim覆盖率数据分析
- 从原理到策略算法再到架构产品看推荐系统 | 附Spark实践案例
- GRE词汇分类之责骂词汇
- python(2)提取多层嵌套列表里子元素的最大值
- [COPYRIGHT] 常见版权许可协议