[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 ...
随机推荐
- 图片和base64 二进制相互转换
package com.xldz.xlworkbench.util; import java.awt.image.BufferedImage; import java.io.ByteArrayInpu ...
- jdk 动态代理和 cglib 动态代理
原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. 而cglib动态代理是利用asm开源包,对代理对象类的class文件加载 ...
- [转]ThinkPHP分页实例
很多人初学thinkphp时,不太熟悉thinkphp的分页使用方法,现在将自己整理的分页方法分享下,有需要的朋友可以看看. 控制器中的代码: $db = M("cost" ...
- jsp-request应用1
用jsp写表单提交数据时需要用到request去读取数据,表单代码如下: <form action="requestresult.jsp" method="post ...
- Windows系统下安装MySQL 8.0.11数据库
MySQL数据库是常用的数据库之一,而且该数据库开源免费,所以很多公司在使用.本文记录如何在Windows系统下安装MySQL数据库,本次安装的版本号为8.0.11,这个版本是当前的最新版本,据宣传, ...
- 手机网站Meta的使用
meta指元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. 标签位于文档的头部,不包含任何内容. 标签的属性定义了与文档相关联的名称/值对. ...
- 字符编码到python编辑器流程
字符(存储了信息的东西)编码(): 键盘发送的是电流-->主机(内存)接受到电流(当作010100110101)-->显示屏 接受电流(当作010100110101------->键 ...
- flink支持的数据类型讲解(可序列化) 和 内置累加器的运用
flink支持的数据类型Flink对DataSet和DataStream中可使用的类型加了一些约束.原因是系统可以通过分析这些类型来确定有效的执行策略和选择不同的序列化方式.有7种不同的数据类型:1. ...
- JS对象 神奇的Math对象,提供对数据的数学计算。注意:Math 对象是一个固有的对象,无需创建它,直接把 Math 作为对象使用就可以调用其所有属性和方法。这是它与Date,String对象的区别
Math对象 Math对象,提供对数据的数学计算. 使用 Math 的属性和方法,代码如下: <script type="text/javascript"> var m ...
- 【noi.ac-CSP-S全国模拟赛第三场】#705. mmt
给定数组a[],b[] 求$$c_i=\sum_{j=1}^{i} a_{\left \lfloor \frac{n}{j} \right \rfloor}·b_{i \bmod j}$$ 大概就是对 ...