莫队算法,用线段树维护最长连续1,复杂度O(nsqrt(m)logn)

刚开始TLE了,看了claris大爷的blog说是kd-tree,然而并不会kd-tree……

然后就打算弃疗了...弃疗之前加了点常数优化,然后就AC了...(滑稽

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#define N 50004
#define ls(a) (a<<1)
#define rs(a) (a<<1^1) using namespace std;
inline int read(){
int ret=0;char ch=getchar();
while (ch<'0' || ch>'9') ch=getchar();
while ('0'<=ch && ch<='9'){
ret=ret*10-48+ch;
ch=getchar();
}
return ret;
} struct query{
int x,y,key,id;
} q[N];
inline bool operator <(const query &a,const query &b){
return (a.key<b.key||a.key==b.key&&((a.y<b.y)^(a.key&1)));
} struct STnode{
int len;
int maxs,maxl,maxr;
} t[N*4];
int pos[N];
inline void PushUp(int x){
t[x].maxs=max(t[ls(x)].maxr+t[rs(x)].maxl,max(t[ls(x)].maxs,t[rs(x)].maxs));
t[x].maxl=t[ls(x)].maxl+(t[ls(x)].maxl==t[ls(x)].len)*t[rs(x)].maxl;
t[x].maxr=t[rs(x)].maxr+(t[rs(x)].maxr==t[rs(x)].len)*t[ls(x)].maxr;
}
void build(int x,int l,int r){
t[x].maxs=t[x].maxl=t[x].maxr=0;
t[x].len=r-l+1;
if (t[x].len==1){pos[l]=x;return;}
int mid=(l+r)/2;
build(x<<1,l,mid);
build(x<<1^1,mid+1,r);
}
void update(int p){
int x=pos[p];
t[x].maxl=t[x].maxr=(t[x].maxs^=1);
while (x!=1) PushUp(x=x>>1);
}
int getans(){
return t[1].maxs;
} int a[N],n;
int l,r;
void move(int L,int R){
for (;l>L;--l) update(a[l-1]);
for (;r<R;++r) update(a[r+1]);
for (;l<L;++l) update(a[l]);
for (;r>R;--r) update(a[r]);
} int ans[N]; int main(){
n=read();int Q=read();
for (int i=1;i<=n;++i) a[i]=read();
for (int i=1;i<=Q;++i){
q[i].x=read();q[i].y=read();
q[i].key=sqrt(q[i].x);
q[i].id=i;
}
sort(q+1,q+Q+1);
l=1;r=0;
build(1,1,n);
for (int i=1;i<=Q;++i){
if (q[i].x>q[i].y){ans[q[i].id]=0;continue;}
move(q[i].x,q[i].y);
ans[q[i].id]=getans();
}
for (int i=1;i<=Q;++i) printf("%d\n",ans[i]);
return 0;
}

  

bzoj4358: permu的更多相关文章

  1. [BZOJ4358]Permu(回滚莫队)

    [BZOJ4358]Permu(回滚莫队) 题面 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域连续段长度. 分析 最简单的方法显然是用线段 ...

  2. 「题解」:[BZOJ4358]permu

    问题: permu 时间限制: 30 Sec  内存限制: 512 MB 题面 题目描述 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域 连 ...

  3. BZOJ4358: permu(带撤销并查集 不删除莫队)

    题意 题目链接 Sol 感觉自己已经老的爬不动了.. 想了一会儿,大概用个不删除莫队+带撤销并查集就能搞了吧,\(n \sqrt{n} logn\)应该卡的过去 不过不删除莫队咋写来着?....跑去学 ...

  4. [bzoj4358]permu:莫队+线段树/回滚莫队

    这道题是几天前水过去的,现在快没印象了,水一发. 首先我们看到它让求解的是最长的值域 连续段长度,很好. 然后就想到了山海经,但但是我还没有做. 然后又想到了很久以前的一次考试的T3旅馆hotel(我 ...

  5. BZOJ4130:[PA2011]Kangaroos

    浅谈\(K-D\ Tree\):https://www.cnblogs.com/AKMer/p/10387266.html 题目传送门:https://lydsy.com/JudgeOnline/pr ...

  6. 【BZOJ4358】permu kd-tree

    [BZOJ4358]permu Description 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域连续段长度. Input 第一行两个整 ...

  7. BZOJ4358:permu

    浅谈\(K-D\) \(Tree\):https://www.cnblogs.com/AKMer/p/10387266.html 题目传送门:https://lydsy.com/JudgeOnline ...

  8. 【DP】permu

    permu [Description] 给定两个1~N的全排列A,B.有两个指针q和p,一开始q.p都为0,可执行以下三种操作: 1.q+1:2.p+1:3.q+1且p+1(Aq+1≠Bp+1时才可以 ...

  9. 4358: permu

    4358: permu 链接 分析: 不删除的莫队+可撤销的并查集. 每次询问先固定左端点到一个块内,然后将这些右端点从小到大排序,然后询问的过程中,右端点不断往右走,左端点可能会撤销,但是移动区间不 ...

随机推荐

  1. SQL Server系统表sysobjects介绍与使用(转))

    这就让sysobjects表格有了用武之地.虽然我不建议你更新这个表格,但是你当然有权对其进行审查. sysobjects 表  在数据库内创建的每个对象(约束.默认值.日志.规则.存储过程等)在表中 ...

  2. Python的高级特性1:容易忽略的不可变类型

    python中有一些容易忽略的不可变类型(str,integer,tuple,None) #错误演示 In [45]: def demo(lst=[]): ....: lst.append(" ...

  3. Centos5.8 安装SVN并配置HTTP访问

    安装 svn sudo yum install subversion 测试 svn --version 安装 httpd 的 svn 模块 sudo yum install mod_dav_svn 前 ...

  4. Meet python: little notes 4 - high-level characteristics

    Source: http://www.liaoxuefeng.com/ ♥ Slice Obtaining elements within required range from list or tu ...

  5. SPM - data analysis

    来源: SPM基本原理与使用PPT, 北师大,朱朝喆研究员,http://www.cnblogs.com/haore147/p/3633515.html ❤ First-level analysis: ...

  6. ELK+FileBeat+Log4Net

    ELK+FileBeat+Log4Net搭建日志系统 output { elasticsearch { hosts => ["localhost:9200"] } stdou ...

  7. ROS(Robot Operating System)常用环境变量介绍

    本文简单介绍ROS系统中常用的环境变量用途及设置方式.ROS系统环境中除了必须配置的环境变量以外,其他的也是十分有用,通过修改变量路径,可以设置ROS系统中log文件存放路径,单元测试结果存放路径等. ...

  8. HDU2389-Rain on your Parade-二分图匹配-ISAP

    裸二分图匹配 /*--------------------------------------------------------------------------------------*/ #i ...

  9. Qt学习笔记网络(一)

    Qt5 移除了QHttp是因为功能重复 用QNetworkAccessManager完全能搞定 新建一个控制台应用程序 看一下QNetworkAccessManager的帮助文档 需要添加Qt + = ...

  10. PRML读书会第七章 Sparse Kernel Machines(支持向量机, support vector machine ,KKT条件,RVM)

    主讲人 网神 (新浪微博: @豆角茄子麻酱凉面) 网神(66707180) 18:59:22  大家好,今天一起交流下PRML第7章.第六章核函数里提到,有一类机器学习算法,不是对参数做点估计或求其分 ...