[JXOI2017] 加法 题解
最小值最大,考虑二分答案,问题转为判断最小值是否能 \(\ge x\)。
假如 \(a_i\ge x\),那我们肯定不管;假如 \(a_i<x\),那最好能让选择的区间 \(r\) 值更大,用优先队列维护即可。区间增幅可以用树状数组维护。
时间复杂度 \(O(n\log^2n)\)。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int t,n,m,k,ad,a[N],c[N];
priority_queue<int>q;
vector<int>g[N];
void add(int x){
for(;x<=n;x+=x&-x)
c[x]+=ad;
}int sum(int x){
int re=0;
for(;x;x-=x&-x)
re+=c[x];
return re;
}int check(int x){
for(int i=1;i<=n;i++) c[i]=0;
while(q.size()) q.pop();
for(int i=1,l=k;i<=n;i++){
for(auto j:g[i]) q.push(j);
int nw=a[i]+sum(n)-sum(i-1);
while(nw<x&&q.size()&&l&&q.top()>=i)
nw+=ad,add(q.top()),q.pop(),l--;
if(nw<x) return 0;
}return 1;
}void solve(){
for(int i=1;i<=n;i++) g[i].clear();
cin>>n>>m>>k>>ad;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1,l,r;i<=m;i++)
cin>>l>>r,g[l].push_back(r);
int l=0,r=2e8,ans;
while(l<=r){
int mid=(l+r)/2;
if(check(mid))
ans=mid,l=mid+1;
else r=mid-1;
}cout<<ans<<"\n";
}signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>t;
while(t--) solve();
return 0;
}
[JXOI2017] 加法 题解的更多相关文章
- BZOJ5321 & 洛谷4064 & LOJ2274:[JXOI2017]加法——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5321 https://www.luogu.org/problemnew/show/P4064 ht ...
- 【BZOJ5321】[JXOI2017]加法(贪心)
[BZOJ5321][JXOI2017]加法(贪心) 题面 BZOJ 洛谷 题解 显然二分答案,算一下每个点至少要覆盖的次数.从左往右考虑如果这个点覆盖次数不够,就会选择覆盖这个点的.右端点最大的线段 ...
- [bzoj5321] [Jxoi2017]加法
Description 可怜有一个长度为 n 的正整数序列 A,但是她觉得 A 中的数字太小了,这让她很不开心. 于是她选择了 m 个区间 [li, ri] 和两个正整数 a, k.她打算从这 m 个 ...
- JXOI2017 加法
题目描述: 可怜有一个长度为 \(n\) 的正整数序列 \(A\),但是她觉得 \(A\) 中的数字太小了,这让她很不开心. 于是她选择了 \(m\) 个区间 \([l_i, r_i]\) 和两个正整 ...
- LuoguP1557 Kruscal的加法 题解
题目Link 就是这道题,做了我整整一天! 看到题目,首先想到的就是:就这?就这一道大水题也能是绿?然后十分钟写完代码,提交-- 果不其然,绿题不是白绿的,看了一眼数据和讨论,又得写高精了-- 先附上 ...
- LuoguB2104 矩阵加法 题解
Content 给定两个 \(n\times m\) 的矩阵 \(A,B\),求 \(C=A+B\). 数据范围:\(1\leqslant n,m\leqslant 100\). Solution 我 ...
- 洛谷P4064 [JXOI2017]加法(贪心 差分)
题意 题目链接 Sol 这题就是一个很显然的贪心... 首先二分一个答案,然后check是否可行.check的时候我们需要对每个位置\(i\),维护出所有左端点在\(i\)左侧,右端点在\(i\)右侧 ...
- BZOJ5321 JXOI2017加法(二分答案+贪心+堆+树状数组)
二分答案后得到每个位置需要被加的次数.考虑贪心.从左到右考虑每个位置,将以该位置为左端点的区间按右端点从大到小加进堆.看该位置还需要被加多少次,如果不需要加了就不管,否则取堆顶区间将其选择,BIT实现 ...
- 【[JXOI2017]加法】
江西竟然还有省选,而且还是可怜题,实在是有点可怕 这道题还是比较清真的,大概是最简单的可怜题? 首先看到最大值最小,就很容易想到了二分答案 对于一个二分出来的答案\(mid\),去把原数列扫一遍就可以 ...
- BZOJ5011 & 洛谷4065 & LOJ2275:[JXOI2017]颜色——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5011 https://www.luogu.org/problemnew/show/P4065 ht ...
随机推荐
- Litctf2024-郑州轻工业大学第二届ctf-校内赛道wp
战队:怎落笔都不对 最终成绩校内第4 MISC 1. 盯帧珍珠 打开文件发现是一个图片,放入 010 查看得文件头是 gif 格式 改为gif后缀得到一个GIF图,在下面这个网站分解,即可得到flag ...
- Redis应用—3.在购物车里的应用
大纲 1.社区电商购物车的读多写多场景分析 2.购物车的复杂缓存与异步落库(Sorted Set + Hash -> hPut + zadd) 3.购物车异步落库与完整加入流程(缓存雪崩 + M ...
- orangepi zero3 使用dd命令进行SD卡系统备份与还原
1. 使用dd命令备份整个sd卡 首先使用 df -h命令查看sd卡挂载名,如下所示,sd卡挂载为 /dev/sdc meng@meng:~/桌面/code$ df -h 文件系统 大小 已用 可用 ...
- Flutter Stream的使用
Flutter Stream的使用 首先,来了解一下stream是什么 异步数据事件的来源. 流提供了一种接收一系列事件的方法.每个事件要么是一个数据事件,也称为流的元素,要么是一个错误 事件,即某事 ...
- 在 Windows 上运行 Podman: 操作指南
在 Windows 上运行 Podman: 操作指南 https://www.redhat.com/sysadmin/run-podman-windows 2021 年 9 月的时候,我写过一篇关于如 ...
- 第 5 章 Debian 系统中可用的软件
目录 5.1. Debian GNU/Linux 收录了哪些类型的应用程序和开发工具? 5.2. 谁编写了所有这些软件? 5.3. 我应该如何获得一份 Debian 打包的程序的最新列表? 5.4. ...
- 解决Failed to load module canberra-gtk-module错误
在Ubuntu环境里,通过./triangulation 1.png 2.png 命令运行高翔的ch7的triangulation程序时报错: Gtk-Message: 09:10:26.571: F ...
- Win10离线安装.NET Framework 3.5的方法技巧
Win10离线安装.NET Framework 3.5的方法技巧 PC系统为win10,在使用过程中,曾遇到提示说 "你的电脑上的应用需要使用以下Windows功能:.NET Framewo ...
- 网络编程入门从未如此简单(二):假如你来设计TCP协议,会怎么做?
本文原题"你管这破玩意儿叫TCP?",由闪客sun分享,转载请联系作者. 1.引言 网络编程能力对于即时通讯技术开发者来说是基本功,而计算机网络又是网络编程的理论根基,因而深刻准确 ...
- 融云技术分享:全面揭秘亿级IM消息的可靠投递机制
本文由融云技术团队原创分享,原题"IM 消息同步机制全面解析",为使文章更好理解,对内容进行了重新归纳和细节修订. 1.内容概述 即时通讯(IM)系统最基础.最重要的是消息的及时性 ...