NOI P序列题 (二分)
题面


题解

——WQS二分
想到这个这题就完了。
赛时没想到这个你就完了。
时间复杂度
O
(
n
log
a
)
O(n\log a)
O(nloga)
不难发现这题有凸性,可以WQS二分。
我们把只能选 k 个段的限制去掉,二分一个罚款额,每次多选一个段,贡献就要罚款,这样可以调整到选 k 个的答案。
最后把罚款后的贡献再加上 k × 罚款额。
去掉限制也不会?
d
p
[
i
]
dp[i]
dp[i] 表示前
i
i
i 个最优答案即可。同时别忘了记录段数(的最值)。
没在NOI考纲上啊,所以还是有可能考的
CODE
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<bitset>
#include<random>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 500005
#define LL long long
#define DB double
#define ENDL putchar('\n')
#define lowbit(x) (-(x) & (x))
#define FI first
#define SE second
namespace{
LL read() {
LL f=1,x=0;int s = getchar();if(s < 0) return -1;
while(s < '0' || s > '9') {if(s == '-')f=-f;s = getchar();}
while(s >= '0' && s <= '9') {x=x*10+(s^48);s = getchar();}
return f * x;
}
void putpos(LL x) {if(!x)return ;putpos(x/10);putchar('0'+(x%10));}
void putnum(LL x) {
if(!x) {putchar('0');return ;}
if(x<0) {putchar('-');x = -x;}
return putpos(x);
}
void AIput(LL x,int c) {putnum(x);putchar(c);}
int n,m,s,o,k;
int a[MAXN],b[MAXN];
int f[MAXN],st[MAXN],hd,tl;
LL dp[MAXN],ct[MAXN],ans;
int heck(LL ad) {
for(int i = 1;i <= n;i ++) {
dp[i] = 0;ct[i] = 0;
}
dp[0] = 0; ct[0] = 0;
for(int i = m;i <= n;i ++) {
dp[i] = dp[i-1]; ct[i] = ct[i-1];
if(dp[i-m] + f[i]+ad > dp[i] || (dp[i-m]+f[i]+ad == dp[i] && ct[i-m]+1 > ct[i])) {
dp[i] = dp[i-m]+f[i]+ad; ct[i] = ct[i-m]+1;
}
}
ans = dp[n];
return ct[n];
}
}
int main() {
n = read();m = read();k = read();
st[hd = 1] = 0; tl = 0;
for(int i = 1;i <= n;i ++) {
a[i] = read();
while(hd <= tl && a[st[tl]] < a[i]) st[tl --] = 0;
st[++ tl] = i;
if(st[hd] <= i-m) st[hd ++] = 0;
f[i] = a[st[hd]];
}
int l = -500000,r = 500000,md;
while(l < r) {
md = floor((l+r)/2.0);
if(heck(md) >= k) r = md;
else l = md+1;
}
int cn = heck(l);
ans -= l*1ll*k;
AIput(ans,'\n');
return 0;
}
NOI P序列题 (二分)的更多相关文章
- [LOJ#6066]. 「2017 山东一轮集训 Day3」第二题[二分+括号序列+hash]
题意 题目链接 分析 首先二分,假设二分的答案为 \(mid\),然后考虑利用括号序列来表示树的形态. 点 \(u\) 的 \(k-\) 子树的括号序列表示实际上是刨去了 \(u\) 子树内若干个与 ...
- [CSP-S模拟测试]:序列(二分答案+树状数组)
题目传送门(内部题98) 输入格式 第一行一个整数$n$,第二行$n$个整数$a_1\sim a_n$,第三行$n$个整数$b_1\sim b_n$. 输出格式 一行一个整数表示$\max(r-l+1 ...
- C - 啥~ 渣渣也想找玩数字 HDU - 2141(有序序列枚举 + 二分优化查找)
题目描述 可爱的演演又来了,这次他想问渣渣一题... 如果给你三个数列 A[],B[],C[],请问对于给定的数字 X,能否从这三个数列中各选一个,使得A[i]+B[j]+C[k]=X? 输入 多组数 ...
- 从一个NOI题目再学习二分查找。
二分法的基本思路是对一个有序序列(递增递减都可以)查找时,测试一个中间下标处的值,若值比期待值小,则在更大的一侧进行查找(反之亦然),查找时再次二分.这比顺序访问要少很多访问量,效率很高. 设:low ...
- [YY]已知逆序列求原序列(二分,树状数组)
在看组合数学,看到逆序列这个概念.于是YY了一道题:已知逆序列,求出原序列. 例子: 元素个数 n = 8 逆序列 a={5,3,4,0,2,1,1,0} 则有原序列 p={4,8,6,2,5,1,3 ...
- 2006 ACM Northwestern European Programming Contest C题(二分求最大)
My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a numberN o ...
- Codeforces Round #371 (Div. 2) D. Searching Rectangles 交互题 二分
D. Searching Rectangles 题目连接: http://codeforces.com/contest/714/problem/D Description Filya just lea ...
- 「长乐集训 2017 Day10」划分序列 (二分 dp)
「长乐集训 2017 Day10」划分序列 题目描述 给定一个长度为 n nn 的序列 Ai A_iAi,现在要求把这个序列分成恰好 K KK 段,(每一段是一个连续子序列,且每个元素恰好属于一 ...
- 【20181102T1】优美的序列【二分+ST表】
题面 [正解] 相当于是 \(GCD_{i=L}^{R} A_i = min_{i=L}^{R} \{A_i\}\) 然后GCD可以用ST表实现\(O(log A_i)\)查询 并且GCD是递减的,所 ...
随机推荐
- 开发工具-Redis Desktop Manager下载地址
更新记录 2022年6月10日 完善标题. 官方: https://github.com/uglide/RedisDesktopManager 免费打包版: https://github.com/le ...
- python PIL 图片素描化
from PIL import Image import numpy as np a = np.asarray(Image.open("D://7.jpg").convert('L ...
- 文件输入输出处理-File
大佬的理解-><IO流和File> 1.File类 File类是IO包中唯一代表磁盘文件本身的对象,File类定义了一些与平台无关的方法来操作文件.通过调用File类提供的各种方法, ...
- ACL权限控制
ALC讲述比较详细 https://zhuanlan.zhihu.com/p/360158311
- 【Srping】事务的执行原理(一)
在使用事务的时候需要添加@EnableTransactionManagement注解来开启事务,那么就从@EnableTransactionManagement入手查看一下事务的执行原理. @Enab ...
- 基于web3D展示技术的煤矿巷道3D可视化系统
地下开采离不开巷道工程.煤矿的生产.运输.排水.通风等各个环节都少不了巷道的支持.在煤矿智能化建设被提上日程的今天,巷道工程的智能化.可视化建设也成了行业趋势.尤其是复杂的井下作业环境,人员信息安全问 ...
- Idea创建文件夹自动合成一个
在idea中创建文件夹时,它们总是自动合成一个,如下图: 文件夹自动折叠真的很影响效率,可能会引发一些不经意的失误 解决方法: 取消这个地方的勾选 这样就可以正常创建文件夹了
- 一文理解OpenStack网络
摘要:如果你能理解OpenStack的网络,那么对于其他云平台的网络,应该也可以通过分析后理解掌握了. 本文分享自华为云社区<<跟唐老师学习云网络> - OpenStack网络实现& ...
- jdbc连接数据库问题
### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Fail ...
- 一条update语句到底加了多少锁?带你深入理解底层原理
迎面走来了你的面试官,身穿格子衫,挺着啤酒肚,发际线严重后移的中年男子. 手拿泡着枸杞的保温杯,胳膊夹着MacBook,MacBook上还贴着公司标语:"我爱加班". 面试开始,直 ...