二分答案 + 前缀和. 题面中式子的意思是每一个区间$[l, r]$的贡献是这个区间内$w_i \geq W$的个数乘以这些$i$的$v_i$和. 很快发现了答案具有单调性,可以做两遍二分,分别看看小于$S$的值最大能取到多少以及大于$S$的最小能取到多少,然后取个$min$. 思考一下怎么判定,查询一个区间内比一个数大的数的个数和权值和,莫不是主席树??? 被$dalao$$D$了,只要每一次都算一遍前缀和就好了,如果$w_i \geq W$就把$i$和$v_i$计入贡献,查询是$O(1)$的…
题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: 1 .给定m 个区间[Li,Ri]: 2 .选出一个参数 W: 3 .对于一个区间[Li,Ri],计算矿石在这个区间上的检验值Yi: 这批矿产的检验结果Y 为各个区间的检验值之和.即:Y1+Y2...+Ym 若这批矿产的检验结果与所给标准值S 相差太多,就需要再去检验另一批矿产.小T 不想费时间去检验另一批矿产,所以他想通…
背景 NOIP2011 day2 第二题 描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: 1 .给定m 个区间[Li ,Ri]: 2 .选出一个参数 W: 3 .对于一个区间[Li ,Ri],计算矿石在这个区间上的检验值Yi:Yi=Σ1*Σvj,Σ的循环变量为j,这里j要满足j∈[Li,Ri]且wj≥W,这里j是矿石编号. 这批矿产的检验结果Y为各个区间的检验值之和.ΣYi…
考试的时候打的二分但没有用前缀和维护.但是有个小细节手误打错了结果挂掉了. 绝对值的话可能会想到三分,但是注意到w增大的时候y是减小的,所以单调性很明显,用二分就可以.但注意一个问题,就是二分最后的结果不一定是最优的,只是在它属于的符号里是最优的,所以需要最后存正负的最优解去比较. 至于check(),先把所有满足wi>=W的所有条件的num(个数)和v(权值)在本位置加上,求前缀和. 即∑vi(wi>=W):∑num(wi>=W).最后用区间的话用前缀和相减维护即可. #include…
[问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有$n$个矿石,从 1 到$n$逐一编号,每个矿石都有自己的重量$w_i$以及价值$v_i$.检验矿产的流程是: 1. 给定 m个区间$[L_i, R_i]$: 2. 选出一个参数$W$: 3. 对于一个区间$[L_i, R_i]$,计算矿石在这个区间上的检验值$Y_i $: \[ Y_i = \sum_j 1 \times \sum_j v_j ,  j \in [L_i, R_i] \text{且} w_j \ge…
Luogu 1314 [NOIP2011]聪明的质检员 (二分) Description 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从 1 到n逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是: 给定 m个区间[Li,Ri]: 选出一个参数W: 对于一个区间[Li,Ri],计算矿石在这个区间上的检验值Yi: \[Y_i= \sum_{j} 1×\sum _{j}v_j,j \in [L_i,R_i],W_j>=W\] 这批矿产的检验结果Y为各个…
聪明的质检员 描述 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从1到n逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是:1.给定m个区间[Li,Ri]:2.选出一个参数W:3.对于一个区间[Li,Ri],计算矿石在这个区间上的 检验值$Y_i$:\[Y_i=(\sum_j {1}) \times(\sum_j v_j) ,j \in [L_i,R_i] \land \: w_i \geqslant W\] 其中 $j$ 为矿石编号 这批矿产的 …
631. [NOIP2011] 聪明的质监员 ★★   输入文件:qc.in   输出文件:qc.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从 1 到n逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是: 1. 给定 m个区间[Li,Ri]: 2. 选出一个参数W: 3. 对于一个区间[Li,Ri],计算矿石在这个区间上的检验值Yi: Yi=∑j1×∑jvj, j∈[…
NC16597 [NOIP2011]聪明的质监员 题目 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 \(n\) 个矿石,从 \(1\) 到 \(n\) 逐一编号,每个矿石都有自己的重量 \(w_i\) 以及价值 \(v_i\) .检验矿产的流程是: 1 .给定$ m$ 个区间 \([l_i,r_i]\): 2 .选出一个参数 \(W\): 3 .对于一个区间 \([l_i,r_i]\),计算矿石在这个区间上的检验值 \(y_i\): \[y_i=\sum\limi…
P1314 聪明的质监员 题意 题目描述 小\(T\)是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有\(n\)个矿石,从\(1\)到\(n\)逐一编号,每个矿石都有自己的重量\(w_i\)以及价值\(v_i\).检验矿产的流程是: 给定\(m\)个区间\([L_i,R_i]\) 选出一个参数\(W\): 对于一个区间\([L_i,R_i]\),计算矿石在这个区间上的检验值\(Y_i\) 这批矿产的检验结果\(Y\)为各个区间的检验值之和.即:\(Y_1+Y_2...+Y_m\) 若这…
聪明的质监员 题目链接:https://www.luogu.org/problemnew/show/P1314 Y(W)随W的值增大而减小 二分W的值,找到最小的W使得Y(W)>S: 比较Y(W)和Y(W-1)与S的差值. 计算Y(W): O(n)预处理一维前缀和数组, O(m)暴力计算出Y(W) #include<cstdio> using namespace std; ][],w[],v[]; inline long long abs(long long x) { ) x=-x; r…
题目:https://www.luogu.org/problemnew/show/P1314 显然就是二分那个标准: 当然不能每个区间从头到尾算答案,所以要先算出每个位置被算了几次: 不知为何自己第一想法是把符合要求的位置插入树状数组再遍历区间得到该区间内的个数然后在其左右端点差分最后遍历位置时一边计算每个位置的次数: 但其实用前缀和就可以了...而且前缀和比上面那个快好多... 调了好半天,才发现 ans 的初值不能习惯性地赋成 0x3f3f3f3f,那个才是个 int 范围内的... 代码如…
二分答案的边界问题还是要注意 double挨着,int+1-1, 此题用到long long,所以初始化ans要足够大,前缀和优化 依然根据check答案大小左右mid,虽然有s,但是有了+1-1加持所以能够自动推出 #include<bits/stdc++.h> #define int long long #define rep(i,x,y) for(register int i=x;i<=y;i++) using namespace std; ; int n,m,s,mi,mx,an…
美丽的题号预示着什么... 描述 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从1到n逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是: 1.给定m个区间[Li,Ri]: 2.选出一个参数W: 3.对于一个区间[Li,Ri],计算矿石在这个区间上的 检验值Yi: 这批矿产的 检验结果Y 为各个区间的检验值之和 .即: Y1+Y2...+Ym 若这批矿产的 检验结果 与所给标准值S相差太多,就需要再去检验另一批矿产.小T不想费时间去检验另一批矿产,…
$Luogu$ $Sol$ 首先$W$一定是某个$w_i$.于是一种暴力方法就出炉了,枚举$W$再计算. 注意到,满足$S-Y$的绝对值最小的$Y$只可能是两种,一种是$<S$的最大的$Y$,一种是$>S$的最小的$Y$.那就分别求出来叭.分别求的时候这个$W$的值是可以二分的.但是这样并不能$A$掉这题,因为$check$的复杂度仍然是$O(NM)$的.看了题解之后发现$check$可以用前缀和吖,觉得很巧妙$qwq$.这样下来$check()$的复杂度变成$O(N+M).$ $Code$…
###一道二分答案加前缀和### 题目中已经暗示的很明显了 "尽可能靠近" " 最小值" 本题的主要坑点在于 long long 的使用 ##abs函数不支持long long !!! #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace s…
题目链接 Solution 这个范围不是二分就是结论题就是数学题... 然后再看一会差不多就可以看出来有单调性所以就可以确定二分的解法了 二分那个$W$,用前缀和$O(n+m)$的时间来求出对答案的贡献 另外求答案的那个式子我一开始看错了...然后忘记乘符合条件的个数了... 还有答案的上界要取$10^{12}$,$10^{12}$是大于$0x7ffffff$的...然后我就挂了半个小时... #include <cstdio> #include <algorithm> #incl…
题目 描述 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从1到n逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是:1.给定m个区间[Li,Ri]:2.选出一个参数W:3.对于一个区间[Li,Ri],计算矿石在这个区间上的检验值Yi:Yi = ∑1*∑vj,j∈[Li, Ri]且wj ≥ W,j是矿石编号这批矿产的检验结果Y 为各个区间的检验值之和.即:Y = ∑Yi,i ∈[1, m]若这批矿产的检验结果与所给标准值S相差太多,就需要再去检验另一…
题目大意: 额--貌似蛮清晰的,就不赘述了. 思路: 首先不难发现M越大Y越小,因此可以二分答案(方向不要弄错),二分出最小的不小于S的Y即可.而计算Y时可用前缀和O(n+m)求得.两种边界情况也要考虑一下(同时long long不要少开). 代码: #include<cstdio> #include<iostream> using namespace std; #define ll long long ; int n,m,i,h,t,k,mn,mx,mid,w[M],v[M],l…
题目链接:传送门 题目大意:给你n个物品,每件物品有重量 W 和价值 V,给m个区间,和一个标准值.(n,m最大200000) 要求找到一个值x,使得m个所有区间的权值和与标准值的差的绝对值最小.单个区间权值计算公式(数目num=0,价值sum=0,若满足 Wi >= x ,则++num,sum+=Vi) 单个区间权值为num*sum 题目思路: 二分+前缀和   首先权值和与X是递减关系,X越大所得值越小,我们容易想到二分,但是m个区间的比较判断怎么处理,如果直接模拟,复杂度最大可达 n^2l…
这个题我第一反应是线段树(雾),然后看了一眼题解之后就后悔了...前缀和...然后二分答案,然后就没有然后了. 题干: 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 nnn 个矿石,从 到 nnn 逐一编号,每个矿石都有自己的重量 wiw_iwi​ 以及价值 viv_ivi​ .检验矿产的流程是: .给定 mmm 个区间 [Li,Ri][L_i,R_i][Li​,Ri​] : .选出一个参数 W WW : .对于一个区间 [Li,Ri][L_i,R_i][Li​,Ri​] ,…
[题目链接]:http://noi.qz5z.com/viewtask.asp?id=z05 [题解] 显然w越大,最后的Y也就越大; 可以依靠这个搞二分: 如果二分枚举的tw得到的Y比S小,则减小tw以增大Y,否则增大tw就好; 那个区间的和可以用前缀和搞出来(确定当前的tw然后搞前缀和): 枚举一下m个区间,每个区间都能O(1)搞出来则m个区间为O(m);然后前缀和搞一下是O(n); 然后二分w为O(logw); 总的复杂度为O(logw*(n+m)): 完全可以接受了; [完整代码] #i…
题面 题解 不难发现,\(W\)增大时,\(Y\)值会随之减小. 于是考虑二分\(W\). 如何\(\mathcal{O}(N)check?\) 每一次前缀和记录一下\(1-i\)之间\(w_i \ge W\)的个数及\(v_i\)之和. 计算出\(|Y_1+Y_2+-+Y_m-S|\),与当前的最小答案取最小值. 返回\(Y_1+Y_2+-+Y_m > S\). 代码 #include <bits/stdc++.h> #define int long long #define itn…
描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: 1 .给定m 个区间[Li ,Ri]: 2 .选出一个参数 W: 3 .对于一个区间[Li ,Ri],计算矿石在这个区间上的检验值Yi:Yi=Σ1*Σvj,Σ的循环变量为j,这里j要满足j∈[Li,Ri]且wj≥W,这里j是矿石编号. 这批矿产的检验结果Y为各个区间的检验值之和.ΣYi,Σ的循环变量为i,1≤i≤m. 若这批矿…
题目大意 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1 到 n 逐一编号,每个矿石都有自己的重量 wi 以及价值 vi.检验矿产的流程是: 1.给定 m 个区间[Li,Ri]: 2.选出一个参数 W: 3.对于一个区间[Li,Ri],计算矿石在这个区间上的检验值 Yi : 这批矿产的检验结果 Y 为各个区间的检验值之和.即: $$\sum_j 1\times \sum_j v_j,j\in[L_i,R_i]且w_j\geq W,j时矿石编号$$若这批矿产…
http://www.rqnoj.cn/problem/657 https://www.vijos.org/p/1740 P1740聪明的质检员 请登录后递交 标签:NOIP提高组2011[显示标签]   描述 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从1到n逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是: 1.给定m个区间[Li,Ri]: 2.选出一个参数W: 3.对于一个区间[Li,Ri],计算矿石在这个区间上的检验值Yi: Yi =…
P1314 [NOIP2011 提高组] 聪明的质监员 题意 题目描述 给定\(n\)个物品,给定每个物品的 重量 \(w_i\) 和 价值 \(v_i\) 给定一个标准值 \(s\) 以及一个参数 \(w\) 质检员每次会抽取\(m\)个区间,每次的抽检结果为 \(y = \sum_{l_i}^{r_i} (w_i \ge w) · \sum_{l_i}^{r_i} v_i\) 求出 \(\min{\mid{y - s}\mid}\) 数据范围 \(1 \le n,m \le 2^5\), \…
题目传送门 讲真,既然质监员这么聪明,为什么要让我们帮他设计程序? 所以还是叫ZZ的质检员吧 其实,我最想说的,不是这个题,而是这个\(\Sigma\)(一见 \(\Sigma\) 就懵逼系列) 这个题的式子是这样的: 嗯,它的意思是:在\(L_i\)到\(R_i\)这段区间里,合法的矿石的数量\(\times\)合法矿石的总价值 接下来就是这道题的思路了,知道这道题是二分后,这道题还是挺简单的,注意一下\(\tt{long\;long}\)的细节就可以了 #include<iostream>…
题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: 1 .给定m 个区间[Li,Ri]: 2 .选出一个参数 W: 3 .对于一个区间[Li,Ri],计算矿石在这个区间上的检验值Yi: 这批矿产的检验结果Y 为各个区间的检验值之和.即:Y1+Y2...+Ym 若这批矿产的检验结果与所给标准值S 相差太多,就需要再去检验另一批矿产.小T 不想费时间去检验另一批矿产,所以他想通…
P1314 聪明的质监员 显然可以二分参数W 统计Y用下前缀和即可. #include<iostream> #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> #include<cmath> #define re register using namespace std; typedef long long ll; void read(int…