HDU 3911 Black And White
Black And White
This problem will be judged on HDU. Original ID: 3911
64-bit integer IO format: %I64d Java class name: Main
Input
Output
Sample Input
4
1 0 1 0
5
0 1 4
1 2 3
0 1 4
1 3 3
0 4 4
Sample Output
1
2
0
Source
#include <bits/stdc++.h>
using namespace std;
const int maxn = ;
struct node {
int lsum[],rsum[],mx[];
bool lazy;
} tree[maxn<<];
void pushup(int v,int k) {
for(int i = ; i < ; ++i) {
tree[v].lsum[i] = tree[v<<].lsum[i];
tree[v].rsum[i] = tree[v<<|].rsum[i];
if(tree[v].lsum[i] == k - (k>>))
tree[v].lsum[i] += tree[v<<|].lsum[i];
if(tree[v].rsum[i] == (k>>))
tree[v].rsum[i] += tree[v<<].rsum[i];
tree[v].mx[i] = max(tree[v<<].mx[i],tree[v<<|].mx[i]);
tree[v].mx[i] = max(tree[v].mx[i],tree[v<<].rsum[i]+tree[v<<|].lsum[i]);
}
} void change(int v) {
swap(tree[v].lsum[],tree[v].lsum[]);
swap(tree[v].rsum[],tree[v].rsum[]);
swap(tree[v].mx[],tree[v].mx[]);
tree[v].lazy = !tree[v].lazy;
}
void pushdown(int v) {
if(tree[v].lazy) {
change(v<<);
change(v<<|);
tree[v].lazy = false;
}
}
void build(int L,int R,int v) {
tree[v].lazy = false;
if(L == R) {
int tmp;
scanf("%d",&tmp);
tree[v].mx[] = tree[v].lsum[] = tree[v].rsum[] = !tmp;
tree[v].mx[] = tree[v].lsum[] = tree[v].rsum[] = tmp;
return;
}
int mid = (L + R)>>;
build(L,mid,v<<);
build(mid+,R,v<<|);
pushup(v,R - L + );
}
void update(int L,int R,int lt,int rt,int v) {
if(lt <= L && rt >= R) {
change(v);
return;
}
pushdown(v);
int mid = (L + R)>>;
if(lt <= mid) update(L,mid,lt,rt,v<<);
if(rt > mid) update(mid+,R,lt,rt,v<<|);
pushup(v,R - L + );
}
int query(int L,int R,int lt,int rt,int v) {
if(lt <= L && rt >= R) return tree[v].mx[];
pushdown(v);
int mid = (L + R)>>,ret = ;
if(lt <= mid) ret = max(ret,query(L,mid,lt,rt,v<<));
if(rt > mid) ret = max(ret,query(mid+,R,lt,rt,v<<|));
if(lt <= mid && rt > mid)
ret = max(ret,min(mid - lt + ,tree[v<<].rsum[]) + min(rt - mid,tree[v<<|].lsum[]));
pushup(v,R - L + );
return ret;
}
int main() {
int n,m,op,a,b;
while(~scanf("%d",&n)){
build(,n,);
scanf("%d",&m);
while(m--){
scanf("%d %d %d",&op,&a,&b);
if(op) update(,n,a,b,);
else printf("%d\n",query(,n,a,b,));
}
}
return ;
}
HDU 3911 Black And White的更多相关文章
- hdu 3911 Black And White(线段树)
题目连接:hdu 3911 Black And White 题目大意:给定一个序列,然后有M次操作: 0 l r:表示询问l,r中最大连续1的个数 1 l r:表示将l,r区间上的数取反 解题思路:线 ...
- HDU 3911 Black and White (线段树,区间翻转)
[题目地址] vjudge HDU [题目大意] 海滩上有一堆石头. 石头的颜色是白色或黑色. 小肥羊拥有魔术刷,她可以改变连续石的颜色,从黑变白,从白变黑. 小肥羊非常喜欢黑色,因此她想知道范围 ...
- HDU 3911 Black And White (线段树区间合并 + lazy标记)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3911 给你n个数0和1,m个操作: 0操作 输出l到r之间最长的连续1的个数 1操作 将l到r之间 ...
- HDU 3911 Black And White 分段树 题解
Problem Description There are a bunch of stones on the beach; Stone color is white or black. Little ...
- hdu 3911 Black And White (线段树 区间合并)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3911 题意: 给你一段01序列,有两个操作: 1.区间异或,2.询问区间最长的连续的1得长度 思路: ...
- HDU 3911 Black And White(线段树区间合并+lazy操作)
开始以为是水题,结果...... 给你一些只有两种颜色的石头,0为白色,1为黑色. 然后两个操作: 1 l r 将[ l , r ]内的颜色取反 0 l r 计算[ l , r ]内最长连续黑色石头的 ...
- HDU 3911 线段树区间合并、异或取反操作
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3911 线段树区间合并的题目,解释一下代码中声明数组的作用: m1是区间内连续1的最长长度,m0是区间内连续 ...
- HDU 5113 Black And White 回溯+剪枝
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5113 Black And White Time Limit: 2000/2000 MS (Java/ ...
- [HDU 5113] Black And White (dfs+剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5113 题目大意:给你N*M的棋盘,K种颜色,每种颜色有c[i]个(sigma(c[i]) = N*M) ...
随机推荐
- (数据结构整理)NJUPT1054
这一篇博客以一些OJ上的题目为载体,整理一下数据结构.会陆续的更新. .. 我们都知道,数据结构的灵活应用有时能让简化一些题目的解答. 一.栈的应用 1.NJUPT OJ 1054(回文串的推断) 回 ...
- WET Dilutes Performance Bottlenecks
WET Dilutes Performance Bottlenecks Kirk Pepperdine THE IMPORTANCE OF THE DRY PRINCIPLE (Don't Repea ...
- 解决Linux下yum安装无法解析URL的问题
问题: [root@yaya ~]# yum -y install gcc-* Loaded plugins: fastestmirror, presto Could not retrieve mir ...
- android客户端向java服务端post发送json
android 端: private void HttpPostData() { try { HttpClient httpclient = new DefaultHttpClient( ...
- 使用WinNTSetup安装win10时提示efi part有红叉(win10安装UEFI系统安装)
1.装载ImDisk虚拟磁盘 2.格式化硬盘 *格式化时注意”创建新ESP分区 3.使用 WinNTSetup 选择win10安装程序 *1. “BOOTMGR PBR "后有感叹号不用管, ...
- [HEOI2012]旅行问题 AC 自动机
题意: 求两个字符串的最长公共后缀,使得该后缀是某个字符串的前缀. 题解: 直接利用 $fail$ 指针的定义即可. 相当于求自动机上两点的 LCA,好像倍增可以,怕炸空间就老老实实写树剖吧. Cod ...
- iOS——集成支付宝 系统繁忙,请稍后再试ALI40247
问题描述:在调用支付宝时,老是显示,系统繁忙,请稍后再试ALI40247. 解决方案: 一.如何签约APP支付接口 第一步:进入管理中心:https://openhome.alipay.com/p ...
- 首家5G体验厅在深圳建成
日前,深圳移动卓越时代营业厅推出5G全方位体验活动,让市民亲身感受5G时代到来.据悉,十大5G展示项目生动展现移动5G带来的生活巨变与产业升级,为5G发展汇聚各界力量加速创新落地. 现场有市民表示,5 ...
- GenIcam标准(六)
2.9.可用的接口 本章用伪代码列出在2.3章介绍过的最重要的接口.对每个接口,实际的实现可以提供更多的方法,例如,除了SetValue(value)方法,还可以用直接映射到SetValue()的方式 ...
- UnrealEngine4编码风格的思考
第一次拿到UE4源码,扫了一遍.各种宏定义,各种模板,各种类层次.杂乱无章. 后来慢慢明确其规律: UE4的编码风格是在匈牙利命名法的基础下做了改进,使其更适用游戏引擎业务(业务特点:数据可视编辑.脚 ...