bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858
2018 自己写的第1题,一遍过
^_^
元旦快乐
#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 100001 struct node
{
int siz;
int L[],R[],con[];
int sum[];
bool rev;
int cover;
}tr[N<<]; struct node_
{
int L1,R1,con1;
int siz;
}; node_ operator + (node_ l,node_ r)
{
node_ res;
res.L1=l.L1;
if(l.L1==l.siz) res.L1+=r.L1;
res.R1=r.R1;
if(r.R1==r.siz) res.R1+=l.R1;
res.con1=max(l.con1,r.con1);
res.con1=max(res.con1,l.R1+r.L1);
return res;
} int x; int ans; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void update(int k)
{
for(int i=;i<=;++i)
{
tr[k].L[i]=tr[k<<].L[i];
if(tr[k<<].L[i]==tr[k<<].siz) tr[k].L[i]+=tr[k<<|].L[i];
tr[k].R[i]=tr[k<<|].R[i];
if(tr[k<<|].R[i]==tr[k<<|].siz) tr[k].R[i]+=tr[k<<].R[i];
tr[k].con[i]=max(tr[k<<].con[i],tr[k<<|].con[i]);
tr[k].con[i]=max(tr[k].con[i],tr[k<<].R[i]+tr[k<<|].L[i]);
tr[k].sum[i]=tr[k<<].sum[i]+tr[k<<|].sum[i];
}
} void build(int k,int l,int r)
{
tr[k].cover=-;
tr[k].siz=r-l+;
if(l==r)
{
read(x);
tr[k].L[x]++;
tr[k].R[x]++;
tr[k].con[x]++;
tr[k].sum[x]++;
return;
}
int mid=l+r>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
update(k);
} void reverse(int k)
{
swap(tr[k].L[],tr[k].L[]);
swap(tr[k].R[],tr[k].R[]);
swap(tr[k].con[],tr[k].con[]);
swap(tr[k].sum[],tr[k].sum[]);
tr[k].rev^=;
if(tr[k].cover!=-) tr[k].cover^=;
} void down_rev(int k)
{
reverse(k<<);
reverse(k<<|);
tr[k].rev^=;
} void covering(int k,int w)
{
tr[k].L[w]=tr[k].R[w]=tr[k].con[w]=tr[k].sum[w]=tr[k].siz;
tr[k].L[w^]=tr[k].R[w^]=tr[k].con[w^]=tr[k].sum[w^]=;
tr[k].cover=w;
tr[k].rev=false;
} void down_cov(int k)
{
covering(k<<,tr[k].cover);
covering(k<<|,tr[k].cover);
tr[k].cover=-;
} void Cover(int k,int l,int r,int opl,int opr,int w)
{
if(l>=opl && r<=opr)
{
covering(k,w);
return;
}
if(tr[k].rev) down_rev(k);
if(tr[k].cover!=-) down_cov(k);
int mid=l+r>>;
if(opl<=mid) Cover(k<<,l,mid,opl,opr,w);
if(opr>mid) Cover(k<<|,mid+,r,opl,opr,w);
update(k);
} void Reverse(int k,int l,int r,int opl,int opr)
{
if(l>=opl && r<=opr)
{
reverse(k);
return;
}
if(tr[k].rev) down_rev(k);
if(tr[k].cover!=-) down_cov(k);
int mid=l+r>>;
if(opl<=mid) Reverse(k<<,l,mid,opl,opr);
if(opr>mid) Reverse(k<<|,mid+,r,opl,opr);
update(k);
} void query(int k,int l,int r,int opl,int opr)
{
if(l>=opl && r<=opr)
{
ans+=tr[k].sum[];
return;
}
if(tr[k].rev) down_rev(k);
if(tr[k].cover!=-) down_cov(k);
int mid=l+r>>;
if(opl<=mid) query(k<<,l,mid,opl,opr);
if(opr>mid) query(k<<|,mid+,r,opl,opr);
} node_ Query(int k,int l,int r,int opl,int opr)
{
if(l>=opl && r<=opr)
{
node_ res;
res.L1=tr[k].L[];
res.R1=tr[k].R[];
res.con1=tr[k].con[];
res.siz=tr[k].siz;
return res;
}
if(tr[k].rev) down_rev(k);
if(tr[k].cover!=-) down_cov(k);
int mid=l+r>>;
if(opr<=mid) return Query(k<<,l,mid,opl,opr);
if(opl>mid) return Query(k<<|,mid+,r,opl,opr);
return Query(k<<,l,mid,opl,opr)+Query(k<<|,mid+,r,opl,opr);
} int main()
{
int n,m;
read(n); read(m);
build(,,n);
int ty,l,r;
while(m--)
{
read(ty); read(l); read(r);
l++; r++;
switch(ty)
{
case : Cover(,,n,l,r,); break;
case : Cover(,,n,l,r,); break;
case : Reverse(,,n,l,r); break;
case : ans=; query(,,n,l,r); cout<<ans<<'\n'; break;
case : printf("%d\n",Query(,,n,l,r).con1); break;
}
}
}
bzoj千题计划177:bzoj1858: [Scoi2010]序列操作的更多相关文章
- BZOJ1858 [Scoi2010]序列操作(线段树)
题目链接 [Scoi2010]序列操作 考验代码能力的一道好题. 思想还是很简单的(直接上线段树),但是比较难写. #include <bits/stdc++.h> using names ...
- bzoj1858[Scoi2010]序列操作 线段树
1858: [Scoi2010]序列操作 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 3079 Solved: 1475[Submit][Statu ...
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划299:bzoj1856: [Scoi2010]字符串
http://www.lydsy.com/JudgeOnline/problem.php?id=1856 卡特兰数 从(1,1)走到(n,m),不能走y=x 上方的点,求方案数 从(1,1)走到(n, ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划252:bzoj1095: [ZJOI2007]Hide 捉迷藏
http://www.lydsy.com/JudgeOnline/problem.php?id=1095 点分树+堆 请去看 http://www.cnblogs.com/TheRoadToTheGo ...
- bzoj千题计划217:bzoj2333: [SCOI2011]棘手的操作
http://www.lydsy.com/JudgeOnline/problem.php?id=2333 读入所有数据,先模拟一遍所有的合并操作 我们不关心联通块长什么样,只关心联通块内有谁 所以可以 ...
随机推荐
- (luogu4180) [Beijing2010组队]次小生成树Tree
严格次小生成树 首先看看如果不严格我们怎么办. 非严格次小生成树怎么做 由此,我们发现一个结论,求非严格次小生成树,只需要先用kruskal算法求得最小生成树,然后暴力枚举非树边,替换路径最大边即可. ...
- [BZOJ2743] [HEOI2012] 采花 (树状数组)
Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一 ...
- 软件测试必备-前端知识点之html基础
前端必备知识点 第一部分:HTML基础 一. web前端标准 1. 结构标签----html 2. 样式标准,美化----css 3. 行为标准---js 二. 五大浏览器厂商 1. ie 2. 谷歌 ...
- 使用netflix Zuul 代理你的微服务
构建 "微服务" 时的一个常见挑战是为系统的使用者提供一个统一的接口.您的服务被分割成一个个积木式的小程序,事实上这些细节本不应该对用户可见. 为了解决这个问题, Netflix ...
- 没有基础的初学者学java怎样快速入门?超全的学习路线图
现在地球人都知道互联网行业工资高,上万都是小case,不值一提.可是对于大部分人来说,工资七八千都算很难了.那我也想学java,当程序员,赚大钱.可是作为一个初学者,怎样才可以快速入门呢?早点入门就可 ...
- 与JavaWeb有关的故事(web请求与Java I/O)
作为一名后端屌丝程序员,对算法.并发.性能乐此不疲.但是,随着年龄和阅历的增加,显然叶落而不知秋的心态是不太能混了.尤其是,某T面试官在明知我是后端,且明确表示对HTTP协议不太熟的情况下,强行让我解 ...
- WCF服务寄宿到IIS
一.WCF简介: Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台.整合了原有的wind ...
- Raid 配置
清除所有外部设备 /opt/MegaRAID/MegaCli/MegaCli64 '-CfgForeign -Clear' -aAll 修改盘的jbod状态 /opt/MegaRAID/MegaCli ...
- C#将.spl剥离成.emf文件格式
本文转载自 星战紫辉 http://www.cppblog.com/rawdata/archive/2009/02/23/74653.html 但C#代码实现为本人原创.https://github. ...
- Linux目录结构和基础知识
目录结构: /bin:存放系统常用的命令程序 /boot:系统启动或引导所需要的一些文件 /dev:可用的设备文件 /etc:系统配置相关的东西 /home:所有用户的主目录 /lib,lib64:存 ...