莫队算法,用线段树维护最长连续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. Angularjs使用的一些特点

    1.函数会影响到全局命名空间 javascript 尽量避免使用全局变量,因为他们容易被其他文件脚本覆盖. angularjs让所有函数的作用域作用在该模块下面,避免了该问题. 2.angularjs ...

  2. HTML-学习笔记(1)

    HTML元素 HTML 元素指的是从开始标签(start tag)到结束标签(end tag)的所有代码. 大多数HTML元素可以嵌套(可以包含其他的HTML元素) HTML 文档由嵌套的 HTML ...

  3. k-d tree 学习笔记

    以下是一些奇怪的链接有兴趣的可以看看: https://blog.sengxian.com/algorithms/k-dimensional-tree http://zgjkt.blog.uoj.ac ...

  4. Integer.parseInt(String s) 和 Integer.valueOf(String s) 的区别

    通过查看java.lang.Integer的源码可以发现, 它们最终调用的都是 /** * Parses the string argument as a signed integer in the ...

  5. java多线程系类:基础篇:09之interrupt()和线程终止方式

    概要 本章,会对线程的interrupt()中断和终止方式进行介绍.涉及到的内容包括:1. interrupt()说明2. 终止线程的方式2.1 终止处于"阻塞状态"的线程2.2 ...

  6. BZOJ 3295 【Cqoi2011】 动态逆序对

    Description 对于序列\(A\),它的逆序对数定义为满足\(i<j\),且\(A_i>A_j\)的数对\((i,j)\)的个数.给\(1\)到\(n\)的一个排列,按照某种顺序依 ...

  7. openwrt编译出错处理记录

    1.代码从windows复制过来编译报错处理,参考:http://www.360doc.com/content/13/1016/21/3884271_321966616.shtml 2.编译lua-s ...

  8. zabbix_proxy安装[yum mysql5.6]

      安装mysql rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm   修改mysql配置: [m ...

  9. Handler 消息传递机制

    1,Handler 的概念Handler 是用来干什么的?1)执行计划任务,可以在预定的时间执行某些任务,可以模拟定时器 2)线程间通信.在Android的应用启动时,会创建一个主线程,主线程会创建一 ...

  10. DOM 元素节点几何量与滚动几何量

    当在 Web 浏览器中查看 HTML 文档时,DOM 节点被解析,并被渲染成盒模型(如下图),有时我们需要知道一些信息,比如盒模型的大小,盒模型在浏览器中的位置等等,本文我们就来详细了解下元素节点的几 ...