bzoj4358: permu
莫队算法,用线段树维护最长连续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的更多相关文章
- [BZOJ4358]Permu(回滚莫队)
[BZOJ4358]Permu(回滚莫队) 题面 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域连续段长度. 分析 最简单的方法显然是用线段 ...
- 「题解」:[BZOJ4358]permu
问题: permu 时间限制: 30 Sec 内存限制: 512 MB 题面 题目描述 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域 连 ...
- BZOJ4358: permu(带撤销并查集 不删除莫队)
题意 题目链接 Sol 感觉自己已经老的爬不动了.. 想了一会儿,大概用个不删除莫队+带撤销并查集就能搞了吧,\(n \sqrt{n} logn\)应该卡的过去 不过不删除莫队咋写来着?....跑去学 ...
- [bzoj4358]permu:莫队+线段树/回滚莫队
这道题是几天前水过去的,现在快没印象了,水一发. 首先我们看到它让求解的是最长的值域 连续段长度,很好. 然后就想到了山海经,但但是我还没有做. 然后又想到了很久以前的一次考试的T3旅馆hotel(我 ...
- BZOJ4130:[PA2011]Kangaroos
浅谈\(K-D\ Tree\):https://www.cnblogs.com/AKMer/p/10387266.html 题目传送门:https://lydsy.com/JudgeOnline/pr ...
- 【BZOJ4358】permu kd-tree
[BZOJ4358]permu Description 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域连续段长度. Input 第一行两个整 ...
- BZOJ4358:permu
浅谈\(K-D\) \(Tree\):https://www.cnblogs.com/AKMer/p/10387266.html 题目传送门:https://lydsy.com/JudgeOnline ...
- 【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时才可以 ...
- 4358: permu
4358: permu 链接 分析: 不删除的莫队+可撤销的并查集. 每次询问先固定左端点到一个块内,然后将这些右端点从小到大排序,然后询问的过程中,右端点不断往右走,左端点可能会撤销,但是移动区间不 ...
随机推荐
- Angularjs使用的一些特点
1.函数会影响到全局命名空间 javascript 尽量避免使用全局变量,因为他们容易被其他文件脚本覆盖. angularjs让所有函数的作用域作用在该模块下面,避免了该问题. 2.angularjs ...
- HTML-学习笔记(1)
HTML元素 HTML 元素指的是从开始标签(start tag)到结束标签(end tag)的所有代码. 大多数HTML元素可以嵌套(可以包含其他的HTML元素) HTML 文档由嵌套的 HTML ...
- k-d tree 学习笔记
以下是一些奇怪的链接有兴趣的可以看看: https://blog.sengxian.com/algorithms/k-dimensional-tree http://zgjkt.blog.uoj.ac ...
- Integer.parseInt(String s) 和 Integer.valueOf(String s) 的区别
通过查看java.lang.Integer的源码可以发现, 它们最终调用的都是 /** * Parses the string argument as a signed integer in the ...
- java多线程系类:基础篇:09之interrupt()和线程终止方式
概要 本章,会对线程的interrupt()中断和终止方式进行介绍.涉及到的内容包括:1. interrupt()说明2. 终止线程的方式2.1 终止处于"阻塞状态"的线程2.2 ...
- BZOJ 3295 【Cqoi2011】 动态逆序对
Description 对于序列\(A\),它的逆序对数定义为满足\(i<j\),且\(A_i>A_j\)的数对\((i,j)\)的个数.给\(1\)到\(n\)的一个排列,按照某种顺序依 ...
- openwrt编译出错处理记录
1.代码从windows复制过来编译报错处理,参考:http://www.360doc.com/content/13/1016/21/3884271_321966616.shtml 2.编译lua-s ...
- zabbix_proxy安装[yum mysql5.6]
安装mysql rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm 修改mysql配置: [m ...
- Handler 消息传递机制
1,Handler 的概念Handler 是用来干什么的?1)执行计划任务,可以在预定的时间执行某些任务,可以模拟定时器 2)线程间通信.在Android的应用启动时,会创建一个主线程,主线程会创建一 ...
- DOM 元素节点几何量与滚动几何量
当在 Web 浏览器中查看 HTML 文档时,DOM 节点被解析,并被渲染成盒模型(如下图),有时我们需要知道一些信息,比如盒模型的大小,盒模型在浏览器中的位置等等,本文我们就来详细了解下元素节点的几 ...