wannafly25 E 01串
链接 wannafly25 E 01串
- 给出一个\(01\)串,有两种操作,操作一是将某一个位置的数字修改,操作二是询问某一个区间,将这个区间看做\(1\)个二进制数,可以随意加减\(2\)的幂次,问将这个数变为\(0\)的最小操作步数,\(n,q\leq 3*10^5\)。
- 动态dp,线段树优化\(dp\)。
- 设\(f_{i,01}\)表示当前在\(i\)号点,是否有进位的最小步骤,转移大力讨论。
- 把每个转移看作一个\(2*2\)的矩阵,实际上一个\(Dp\)就是一堆矩阵的和,线段树维护矩阵和和单点修改即可。
- 转移$$f_{i,j}=min(f_{i,0}+f_{0,j},f_{i,1}+f_{1,j})$$
- 初始条件$$f_{0,0}=x,f_{1,1}=!x,f_{1,0}=f_{0,1}=1$$
- 复杂度\(O(nlogn)\)
#include<bits/stdc++.h>
#define R register int
using namespace std;
const int N=300001;
int n,q,w[N],Le[N*4],Ri[N*4];char S[N];
int gi(){
R x=0,k=1;char c=getchar();
while(c!='-'&&(c<'0'||c>'9'))c=getchar();
if(c=='-')k=-1,c=getchar();
while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x*k;
}
struct Mar{
int s[2][2];
void init(R x){
s[0][0]=x,s[1][1]=(!x);
s[1][0]=s[0][1]=1;
}
}z,te[N*4];
Mar operator + (Mar x,Mar y){
for(R i=0;i<=1;++i)
for(R j=0;j<=1;++j)
z.s[i][j]=min(x.s[i][0]+y.s[0][j],x.s[i][1]+y.s[1][j]);
return z;
}
void build(R le,R ri,R i){
Le[i]=le,Ri[i]=ri;
if(le==ri){te[i].init(w[le]);return ;}
R mid=(Le[i]+Ri[i])>>1,ls=(i<<1),rs=(ls|1);
build(le,mid,ls),build(mid+1,ri,rs);
te[i]=te[ls]+te[rs];
}
Mar quy(R le,R ri,R i){
if(Le[i]==le&&Ri[i]==ri)return te[i];
R mid=(Le[i]+Ri[i])>>1,ls=(i<<1),rs=(ls|1);
if(ri<=mid)return quy(le,ri,ls);
else if(le>mid)return quy(le,ri,rs);
else return quy(le,mid,ls)+quy(mid+1,ri,rs);
}
void mdf(R pos,R v,R i){
if(Le[i]==Ri[i]){w[pos]=v,te[i].init(v);return ;}
R mid=(Le[i]+Ri[i])>>1,ls=(i<<1),rs=(ls|1);
if(pos<=mid)mdf(pos,v,ls);else mdf(pos,v,rs);
te[i]=te[ls]+te[rs];
}
int main(){
n=gi(),scanf("%s",S+1);
for(R i=1;i<=n;++i)w[i]=S[i]-'0';
build(1,n,1),q=gi();
while(q--){
R op=gi(),u=gi(),v=gi();
if(op==1)printf("%d\n",quy(u,v,1).s[0][0]);
else mdf(u,v,1);
}
return 0;
}
wannafly25 E 01串的更多相关文章
- JZOJ P1847:找01串
传送门 DP预处理+贪心 首先设$f[i][j]$表示长度为$i$的01串中有不大于$j$个1,然后显然 $f[i][j]=\sum_{k=1} ^{j} C[i][k]$ $C[i][j]=C[i- ...
- 洛谷P2727 01串 Stringsobits
P2727 01串 Stringsobits 24通过 55提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交 讨论 题解 最新讨论 这题的思路是啥啊!!!跪求- 题目背景 考虑 ...
- C++实现01串排序
题目内容:将01串首先按长度排序,长度相同时,按1的个数从少到多进行排序,1的个数相同时再按ASCII码值排序. 输入描述:输入数据中含有一些01串,01串的长度不大于256个字符. 输出描述:重新排 ...
- 01串(dp)
01串 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个, ...
- 【巧妙】【3-21个人赛】Problem C 01串
Problem C Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Sub ...
- NYOJ-252 01串
01串 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描写叙述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有"11"子串的这样的长 ...
- NYOJ 252 01串(斐波那契数列变形)
01串 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个, ...
- COGS 862. 二进制数01串【dp+经典二分+字符串】
862. 二进制数01串 ★ 输入文件:kimbits.in 输出文件:kimbits.out 简单对比 时间限制:1 s 内存限制:128 MB USACO/kimbits(译 by ...
- 1415: 小ho的01串 [字符串]
点击打开链接 1415: 小ho的01串 [字符串] 题目描述 有一个由0和1组成的字符串,它好长呀--------一望无际 恩,说正题,小ho的数学不太好,虽然是学计算机的但是看见0和1也是很头疼的 ...
随机推荐
- Oracle诊断:在程序的运行中,有时候数据库会断开连接
在程序的运行中,有时候数据库会断开连接,然后报下面错误: ORA-12519: TNS:no appropriate service handler found 可用的服务处理程序没有找到. 1. ...
- docker学习与应用
概要 众所周知,Docker是当前非常火的虚拟化容器技术,对于它的优势以及使用场景网上的资料非常多,这里我推荐大家去这个网站去详细学习docker. 我这里就写一下作为一名后端开发程序员,自己学习do ...
- ES与CQRS之旅
引言 领域驱动设计(Domain Driven Design),使用统一的建模语言.专注业务领域分析.采取化整为零并反复迭代的方式,以业务领域模型为圆心,向外辐射到系统轮廓的勾勒.具体模块的实现,为我 ...
- python生成requirements.txt 导出项目依赖
使用pip freeze $ pip freeze > requirements.txt 这种方式是把整个环境中的包都列出来了,如果是虚拟环境可以使用. 通常情况下我们只需要导出当前项目的req ...
- jenkins执行 pod install 报错 CocoaPods requires your terminal to be using UTF-8 encoding. Consider adding the following to ~/.profile:
错误提示是: CocoaPods 需要终端使用utf-8编码 解决办法
- java SimpleDateFormat setLenient用法
参考博客:https://www.cnblogs.com/my-king/p/4276577.html SimpleDateFormat.setLenient(true) : 默认值true,不严格解 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_1_IO概述(概念&分类)
- 【HANA系列】SAP HANA 1.0 SPS 11 新特性
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA 1.0 SPS ...
- 为什么说 Babel 将推动 JavaScript 的发展【转】
Babel是一个转换编译器,它能将 ES6 转换成可以在浏览器中运行的代码.Babel 由来自澳大利亚的开发者Sebastian McKenzie创建.他的目标是使 Babel 可以处理 ES6 的所 ...
- Django密码错误报错提醒
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOwAAAIBCAYAAABKllNhAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjw