显然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的更多相关文章

  1. 【hdu4734】【F(x)】数位dp + 小小的总结一下

    (https://www.pixiv.net/member_illust.php?mode=medium&illust_id=65608478) Problem Description For ...

  2. Mysql_以案例为基准之查询

    查询数据操作

  3. 关于C++对汉字拼音的处理——终结篇

    以前写过了3个博文,都是关于汉字转拼音的,后来发现都不是很“完美”的解决方案,第一个和第二个利用的unicode编码的范围进行确定汉字的拼音,但是难免有遗漏,这个在后面的实践中发现的,后来第三个方法是 ...

  4. ISO7816协议中几个时间

    T=0协议 第一.初始等待时间: 复位应答时,卡片回复的连续两个数据的起始沿之间的时间间隔,这个时间间隔不超过9600etu, 在波 特率为9600是,该时间为1s 第二.GT: 两个连续字符之间的最 ...

  5. 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 ...

  6. BZOJ 1649: [Usaco2006 Dec]Cow Roller Coaster( dp )

    有点类似背包 , 就是那样子搞... --------------------------------------------------------------------------------- ...

  7. android intent收集转载汇总

    Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS);                 ComponentName comp = ...

  8. 01背包dp+并查集 Codeforces Round #383 (Div. 2)

    http://codeforces.com/contest/742/problem/D 题目大意:有n个人,每个人有重量wi和魅力值bi.然后又有m对朋友关系,朋友关系是传递的,如果a和b是朋友,b和 ...

  9. C# 经典入门12章-使用泛型-1

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8sAAAK5CAIAAAAHDiuGAAAgAElEQVR4nOyd9V9Uzfv/v3/J0t0N0p

  10. 使用sed删除拼音的音调

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

随机推荐

  1. python中os模块获取路径的几种方式

    一.代码 import os BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) p ...

  2. NX二次开发-创建直线(起点-向量方向-长度)UF_CURVE_create_line

    NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_csys.h> #include < ...

  3. linux centos 装g++安装不了

    今天需要编译一个项目的时候在装g++都装不上, [root@master hadoop]# yum install g++ Loaded plugins: fastestmirror, refresh ...

  4. eclipse导入别人项目配置tomcat和jdk

    1.file--import--General--Existing Projiect into Workspace-- 2.导入项目成功后,项目会有错误,需重新进行tomcat及jdk的配置 项目名右 ...

  5. JavaScript学习总结(七)——ECMAScript6(ES6)

    一.ECMAScript概要 ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通 ...

  6. nginx之tcp负载代理

    大多数人针对nginx的负载均衡代理都是停留在HTTP代理那一块,我也一样:然而最近遇到了一个小问题,下面简单的叙述一下: 1.开发那边使用java代码进行ssh连接Linux服务器,然后执行bash ...

  7. x25, PF_X25 - ITU-T X.25 / ISO-8208 协议接口。

    总览 #include <sys/socket.h> #include <linux/x25.h> x25_socket = socket(PF_X25, SOCK_SEQPA ...

  8. 关于python merge后数据行数增加的问题

    其中一个可能的原因是 join 的 data 里面的列不唯一,也就是要匹配的表里面有些一行数据对应了被匹配表多条数据,这样出来可能会增加行数,可以再查一下被匹配表里的数据是否去重

  9. PHP算法之宝石与石头

    给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. J 中的字母不重复,J 和 S中的所有字符都是字母 ...

  10. CSIC_716_20191126【面向对象编程--继承】

    继承 什么是继承:继承是新建类的一种方式,通过此方式生成的类称为子类.或者 派生类,被继承的类称为父类.基类或超类.在python中,一个子类可以继承多个父类. 继承的作用:减少代码的冗余,提高开发效 ...