[CF587-F]WI-FI
显然DP题...
f[i][0]表示这个点不装路由器,f[i][1]表示装路由器
转移也很简单,在前面一段区间找最小值就好了
但是直接转移是$O(n*k)$的,会T掉
大佬说这个东西有单调性,但是菜鸡我找不到,因为是区间问题,所以线段树强上
区间查询+单点修改
#include<bits/stdc++.h>
#define int long long
#define inf (0x7f7f7f7f7f7f7f)
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-') f=-;chr=getchar();}
while(isdigit(chr)){ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}const int M = 2e5+;
struct Segment_Tree{
int s[M<<];
#define mid (l+r>>1)
#define ls (i<<1)
#define rs (i<<1|1)
inline void Push_Up(int i){s[i]=min(s[ls],s[rs]);}
void Build(int i,int l,int r){
if(l==r)return (void)(s[i]=inf);
Build(ls,l,mid),Build(rs,mid+,r);
Push_Up(i);
}void Update(int i,int l,int r,int pos,int x){
if(l==r)return (void)(s[i]=min(s[i],x));
if(pos<=mid) Update(ls,l,mid,pos,x);
else Update(rs,mid+,r,pos,x);
Push_Up(i);
}int Query(int i,int l,int r,int ql,int qr){
if(ql<=l&&r<=qr)return s[i];
int t1=inf,t2=inf;
if(ql<=mid) t1=Query(ls,l,mid,ql,qr);
if(qr>mid) t2=Query(rs,mid+,r,ql,qr);
return min(t1,t2);
}
}T1,T2;
char s[M];
int n,m,k,f[M][];
signed main(){
n=read(),k=read();
scanf("%s",s+);
T1.Build(,,n),T2.Build(,,n);
memset(f,0x3f,sizeof(f));
T2.Update(,,n,,f[][]=f[][]=);
for(int i=;i<=n+;i++){
f[i][]=T1.Query(,,n,max(i-k,1ll),i-);
if(s[i]=='') f[i][]=T2.Query(,,n,max(1ll,i-k-),i-)+i-;
else f[i][]=min(T1.Query(,,n,max(1ll,i-k-),i-),min(f[i-][],f[i-][]))+i-;
T2.Update(,,n,i,min(f[i][],f[i][]));
if(s[i]=='') T1.Update(,,n,i,f[i][]);
}cout<<min(f[n+][],f[n+][]);
return ;
}
[CF587-F]WI-FI的更多相关文章
- 【hdu4734】【F(x)】数位dp + 小小的总结一下
(https://www.pixiv.net/member_illust.php?mode=medium&illust_id=65608478) Problem Description For ...
- Mysql_以案例为基准之查询
查询数据操作
- 关于C++对汉字拼音的处理——终结篇
以前写过了3个博文,都是关于汉字转拼音的,后来发现都不是很“完美”的解决方案,第一个和第二个利用的unicode编码的范围进行确定汉字的拼音,但是难免有遗漏,这个在后面的实践中发现的,后来第三个方法是 ...
- ISO7816协议中几个时间
T=0协议 第一.初始等待时间: 复位应答时,卡片回复的连续两个数据的起始沿之间的时间间隔,这个时间间隔不超过9600etu, 在波 特率为9600是,该时间为1s 第二.GT: 两个连续字符之间的最 ...
- bzoj1649 [Usaco2006 Dec]Cow Roller Coaster
Description The cows are building a roller coaster! They want your help to design as fun a roller co ...
- BZOJ 1649: [Usaco2006 Dec]Cow Roller Coaster( dp )
有点类似背包 , 就是那样子搞... --------------------------------------------------------------------------------- ...
- android intent收集转载汇总
Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); ComponentName comp = ...
- 01背包dp+并查集 Codeforces Round #383 (Div. 2)
http://codeforces.com/contest/742/problem/D 题目大意:有n个人,每个人有重量wi和魅力值bi.然后又有m对朋友关系,朋友关系是传递的,如果a和b是朋友,b和 ...
- C# 经典入门12章-使用泛型-1
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8sAAAK5CAIAAAAHDiuGAAAgAElEQVR4nOyd9V9Uzfv/v3/J0t0N0p
- 使用sed删除拼音的音调
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
随机推荐
- hive的复合数据类型
hive中的复合数据类型 Array array中的数据为相同类型,例如,假如array A中元素['a','b','c'],则A[1]的值为'b' 数据结构如下: zhangsan beijing, ...
- BZOJ 3626: [LNOI2014]LCA(树剖+差分+线段树)
传送门 解题思路 比较有意思的一道题.首先要把求\(\sum\limits_{i=l}^r dep[lca(i,z)]\)这个公式变一下.就是考虑每一个点的贡献,做出贡献的点一定在\(z\)到根节点的 ...
- HDU6331Problem M. Walking Plan
传送门 分块floyd $f[i][j][k]$表示从i走k步到j的最短路 $g[i][j][k]$表示从i走k*100步到j的最短路 $h[i][j][k]$表示从i至少走k步到j的最短路 询问从x ...
- C++之引用与符号“&”
一.&的意思: 1.取地址符,这时候它用于数据的前面,比如int a=&b; 2.C++里还使用&作为引用符,如果你确认程序是标准的C而非C++的话,那么可以排除是引用了.引用 ...
- Harbor任意管理员注册漏洞复现CVE-2019-16097
注册时抓包 添加poc "has_admin_role":true 管理员权限 POC POST /api/users HTTP/1.1 Host: 127.0.0.1 Conte ...
- 基于SpringBoot的Swagger2快速入门
1. Springboot 集成 Swagger2 1.1 导入Swagger2 依赖 <!-- https://mvnrepository.com/artifact/io.springfox/ ...
- Python:获取当前py的文件名
采用pathlib库 from pathlib import Path Path(__file__).name
- 16-Ubuntu-文件和目录命令-切换目录-cd
cd(change directory),其功能为更改当前的工作目录. 注意:Linux所有的目录和文件名都是大小写敏感的. 命令 含义 cd 切换到当前用户的主目录(/home/用户目录) ...
- 2019-8-31-dotnet-判断程序当前使用管理员运行降低权使用普通权限运行
title author date CreateTime categories dotnet 判断程序当前使用管理员运行降低权使用普通权限运行 lindexi 2019-08-31 16:55:58 ...
- Impala系统架构