记'1'为+1,'0'为-1;

可以发现

pre[i],suf[i]分别为前/后缀和

a[i]=max(pre[l.....i]);

b[i]=max(suf[i+1....r]);

ans=max(a[l]+b[l],a[l+1]+b[l+1],........a[r]+b[r]);

即ans=最大的不相交的(前缀和+后缀和)

证明:

首先下界是显然的,即不可能比这个答案更小。

至于上界, 可以大力分类讨论证明。

比如

假如存在一个后缀不合法

设ans=pre[l]+suf[r];

设这个不合法的后缀位置为k。

k>l时:

此时suf[r]显然可以在保证pre[l]不变的情况下找到一个更大的取值,矛盾。

k<l时:

此时有一个显然的结论是

t=sum[l+1..r-1]<=0

因为>0的话显然可以再保证pre[l]不变的情况下找到一个更大的suf[r]。

再设p=sum[k..l-1],p+t显然大于0

显然这时答案不会超过pre[l]-p+suf[r]+p+t=pre[l]+suf[r]+t

因为t<=0,不会更优

得证

最后,用线段树维护即可

每一个节点保存对应区间的区间和,最大前缀,最大后缀,答案

#include<iostream>
#include<cctype>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#define N 220000
#define eps 1e-7
#define inf 1e9+7
#define ll long long
using namespace std;
inline int read()
{
char ch=0;
int x=0,flag=1;
while(!isdigit(ch)){ch=getchar();if(ch=='-')flag=-1;}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*flag;
}
struct tree
{
int tot,pre,suf,ans;
}node[N*4];
tree operator+(tree a,tree b)
{
tree ans;
ans.tot=a.tot+b.tot;
ans.pre=max(a.pre,b.pre+a.tot);
ans.suf=max(b.suf,a.suf+b.tot);
ans.ans=max(a.pre+b.suf,max(a.ans+b.tot,b.ans+a.tot));
return ans;
}
char s[N];
struct Segment_Tree
{
#define lson o<<1
#define rson o<<1|1
#define mid ((l+r)>>1)
inline void pushup(int o)
{
node[o]=node[lson]+node[rson];
}
void build(int o,int l,int r)
{
if(l==r)
{
if(s[l-1]=='1')node[o]=(tree){1,1,1,1};
else node[o]=(tree){-1,0,0,0};
return;
}
build(lson,l,mid);
build(rson,mid+1,r);
pushup(o);
}
tree query(int o,int l,int r,int ql,int qr)
{
if(ql<=l&&r<=qr)return node[o];
bool flag1=ql<=mid,flag2=qr>mid;
if(flag1&&flag2)
return query(lson,l,mid,ql,qr)+query(rson,mid+1,r,ql,qr);
else
{
if(flag1)return query(lson,l,mid,ql,qr);
if(flag2)return query(rson,mid+1,r,ql,qr);
}
}
}T;
int main()
{
int n=read(),m=read(),i,l,r;
scanf("%s",s);
T.build(1,1,n);
for(i=1;i<=m;i++)
{
l=read();r=read();
printf("%d\n",T.query(1,1,n,l,r).ans);
}
return 0;
}

正睿 2018 提高组十连测 Day4 T3 碳的更多相关文章

  1. 正睿 2018 提高组十连测 Day2 T2 B

    题目链接 http://www.zhengruioi.com/contest/84/problem/318 题解写的比较清楚,直接扒过来了. B 算法 1 直接按题意枚举,动态规划或是记忆化搜索. 时 ...

  2. 正睿OI提高组十连测 day1 总结

    可能是最简单的一场比赛了吧,结果却打得这么差... T1是个找规律题,结果一开始愚蠢地找错了规律,然后又对拍,到1h多一点才过掉 然后看t2和t3,以为t2是个水题,t3也只要处理一下就好了,先写t2 ...

  3. 【正睿oi省选十连测】第一场

    四小时写了两个暴力??自闭 [原来这就是神仙们的分量Orz rank 56/75 可以说是无比垃圾了 下周目标:进步十名?[大雾 T1 题意:有n个点的图 点有点权Ai 也有点权Bi = A_1 + ...

  4. BZOJ NOIP提高组十连测第一场

    今天的题目一共拿了$180$分,感觉自己还是太菜了,二三两题只能骗到部分分 1.$String\ Master$ 题目大意:有两个字符串,在允许k次失配的情况下,求最长公共子串的长度 没什么好讲,直接 ...

  5. [ZJOJ] 5794 2018.08.10【2018提高组】模拟A组&省选 旅行

    Description 悠悠岁月,不知不觉,距那传说中的pppfish晋级泡泡帝已是过 去数十年.数十年 中,这颗泡泡树上,也是再度变得精彩,各种泡泡 天才辈出,惊艳世人,然而,似乎 不论后人如何的出 ...

  6. NOIp 2018 提高组

    T1铺设道路 传送门 题目描述 春春是一名道路工程师,负责铺设一条长度为 $ n $ 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 $ n $ 块首尾相连的区域,一开始,第 ii ...

  7. 2018提高组训练Day2

    A 算法 1 对于每组询问,暴力的算出每个二次函数的取值. 时间复杂度 \(O(nq)\).期望得分 \(20\) 分. 算法 2 当 \(x>0\) 时,要求 \(a_ix^2+b_ix\) ...

  8. NOIP 2018 提高组初赛解题报告

    单项选择题: D 进制转换题,送分: D 计算机常识题,Python是解释运行的: B 常识题,1984年小平爷爷曰:“娃娃抓起”: A 数据结构常识题,带进去两个数据就可以选出来: D 历年真题没有 ...

  9. NOIP 2018 提高组初赛试题 题目+答案+简要解析

    一.单项选择题(共 10  题,每题 2  分,共计 20  分: 每题有且仅有一个正确选项)       1. 下列四个不同进制的数中,与其它三项数值上不相等的是( ). A. (269) 16 B ...

随机推荐

  1. 编译openwrt时报错:fstools-2018-01-02-11efbf3b/libfstools/overlay.c: At top level: cc1: error: unrecognized command line option '-Wno-format-truncation' [-Werror]

    1. 详细错误信息 [ 11%] Building C object CMakeFiles/fstools.dir/libfstools/overlay.c.o/home/jello/openwrt/ ...

  2. 转载:Systemd 服务配置文件

    目录 一.开机启动 二.启动服务 三.停止服务 四.读懂配置文件 五. [Unit] 区块:启动顺序与依赖关系. 六.[Service] 区块:启动行为 6.1 启动命令 6.2 启动类型 6.3 重 ...

  3. Nacos整合Spring Cloud Gateway实践

    Spring Cloud Gateway官网:http://spring.io/projects/spring-cloud-gateway Eureka1.0的问题和Nacos对比:https://w ...

  4. Dubbo集群配置和官方文档

    集群配置: https://blog.csdn.net/zh520qx/article/details/63679908 https://www.cnblogs.com/hd3013779515/p/ ...

  5. How to resize slide dimensions without resizing any objects on the slide?

    IF you are competent to unzip the pptx file and modify the XML it can be done, the slide size will c ...

  6. 题解——洛谷P3128 [USACO15DEC]最大流Max Flow

    裸的树上差分 因为要求点权所以在点上差分即可 #include <cstdio> #include <algorithm> #include <cstring> u ...

  7. 论文笔记:Semantic Segmentation using Adversarial Networks

    Semantic Segmentation using Adversarial Networks 2018-04-27 09:36:48 Abstract: 对于产生式图像建模来说,对抗训练已经取得了 ...

  8. HDU 4318 Power transmission(最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=4318 题意: 给出运输路线,每条路线运输时都会损失一定百分比的量,给定起点.终点和初始运输量,问最后到达终点时最 ...

  9. python学习 day09打卡 初识函数

    本节内容: 1.什么是函数 2.函数定义,函数名,函数体及函数的调用 3.函数的返回值 4.函数的参数 一.什么是函数 函数:对代码块和功能的封装和定义 定义一个事情或者功能.等到需要的时候直接去用, ...

  10. _itemmod_gem_remove

    该表可配置以一定代价移除宝石,移除后获得该宝石 `entry`宝石ID `reqId` 需求ID `chance`几率 `comond` 备注