[NOIP模拟赛] seq
seq

试题分析
介绍一种方法叫做回滚莫队。
- 回滚莫队是一种只加不删的莫队。
首先处理\(l,r\)都在同一个块内的询问,暴力即可。
然后对于\(l,r\)不同在一个块,我们将左端点挂在其所在的块。
将挂在每个块上的右端点排序,这样对于左边我们每次暴力滚回当前块的右端点,这里可以用主席树之类的数据结构维护。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
#define LL long long
inline int read(){
int x=0,f=1; char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*f;
}
const int INF = 2147483600;
const int MAXN = 100000;
int N,M; int a[MAXN+1];
int bel[MAXN+1];
struct data{int l,r,id;}q[MAXN+1];
bool cmp(data a,data b){
if(bel[a.l]!=bel[b.l]) return bel[a.l]<bel[b.l];
return a.r<b.r;
}
int L[MAXN+1],R[MAXN+1]; int res;
inline void init_over(){
res=0; memset(L,0,sizeof(L));
memset(R,0,sizeof(R)); return ;
}
struct stak{int pos,x;}staR[MAXN+1],staL[MAXN+1];
int ans[MAXN+1];
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
N=read(),M=read(); int sqr=(int)sqrt(N)+100,top;
for(int i=1;i<=N;i++) a[i]=read();
for(int i=1;i<=M;i++) q[i].l=read(),q[i].r=read(),q[i].id=i;
for(int i=1;i<=N;i++) bel[i]=(i-1)/sqr+1;
sort(q+1,q+M+1,cmp); int l=bel[q[1].l]*sqr,r=bel[q[1].l]*sqr;
for(int i=1;i<=M;i++){
//cout<<q[i].l<<" "<<q[i].r<<":"<<bel[q[i].l]<<" "<<bel[q[i].r]<<endl;
l=bel[q[i].l]*sqr; //l=min(l,N);
if(bel[q[i].l]!=bel[q[i-1].l]) r=bel[q[i].l]*sqr,init_over();
/*if(bel[q[i].l]==bel[q[i].r]){
res=0;
for(int j=q[i].l;j<=q[i].r;j++){
res=max(res,L[a[j]-1]+R[a[j]+1]+1);
R[a[j]-L[a[j]-1]]=L[a[j]+R[a[j]+1]]=L[a[j]-1]+R[a[j]+1]+1;
}
ans[q[i].id]=res;
for(int j=q[i].l;j<=q[i].r;j++) L[a[j]]=R[a[j]]=0;
continue;
}*/
while(r<q[i].r){
++r; res=max(res,L[a[r]-1]+R[a[r]+1]+1);
R[a[r]-L[a[r]-1]]=L[a[r]+R[a[r]+1]]=L[a[r]-1]+R[a[r]+1]+1;
} top=0;
int res2=res;
for(l=min(l,q[i].r);l>=q[i].l;--l){
res2=max(res2,L[a[l]-1]+R[a[l]+1]+1);
int ll=a[l]-L[a[l]-1],rr=a[l]+R[a[l]+1];
staR[++top].pos=ll; staR[top].x=R[ll];
staL[top].pos=rr; staL[top].x=L[rr];
R[ll]=L[rr]=L[a[l]-1]+R[a[l]+1]+1;
} ans[q[i].id]=res2;
for(;top;--top){
R[staR[top].pos]=staR[top].x;
L[staL[top].pos]=staL[top].x;
}
}
for(int i=1;i<=M;i++) printf("%d\n",ans[i]);
return 0;
}
[NOIP模拟赛] seq的更多相关文章
- NOIP模拟赛 6.29
2017-6-29 NOIP模拟赛 Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走, ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
随机推荐
- Docker explainations
What does docker run --link mean, what's the usage? link 是在两个contain之间建立一种父子关系,父container中的web,可以得到子 ...
- Spring理论基础-面向切面编程
AOP是Aspect-Oriented Programming的缩写,中文翻译是面向切面编程.作为Spring的特征之一,是要好好学习的. 首先面向切面编程这个名称很容易让人想起面向对象编程(OOP) ...
- sumblime快捷键
原文地址:https://blog.csdn.net/shutfuckingup/article/details/23846603 Ctrl+D 选词 (反复按快捷键,即可继续向下同时选中下一个相同的 ...
- c语言中的size_t
size_t unsigned int 类型,无符号,它的取值没有负数.用来表示 参数/数组元素个数,sizeof 返回值,或 str相关函数返回的 size 或 长度.sizeof 操作符的结果类型 ...
- 微信支付:curl 出错,错误码: 60
在测试微信支付 - 模式二 - 扫码支付时,遇到如下错误: curl出错,错误码:60 这是因为在 WxPay.Api.php 文件中做了严格的 ssl 证书校验: curl_setopt($ch,C ...
- socket.io入门整理
我自己在用socket.io开发,对官方网站上的文档,进行简单的整理,然后自己写了一个简单的聊天程序. 最最开始 先安装socket.io: 1 npm install socket.io 利用Nod ...
- 用Python写个自动ssh登录远程服务器的小工具
很多时候我们喜欢在自己电脑的终端直接ssh连接Linux服务器,而不喜欢使用那些有UI界面的工具区连接我们的服务器.可是在终端使用ssh我们每次都需要输入账号和密码,这也是一个烦恼,所以我们可以简单的 ...
- SVN服务的配置与管理
引言 没当服务器重启,SVN服务都会停止,每次都得重启一下服务,为了解决这样的问题.有了下文. 一.配置自启动服务 sc create SVNService binpath="E:\svn\ ...
- rabbitmq和ons-rocketmq使用对比
MQ,其实目的都是一样,就是应对系统的并发可以实现消峰和解耦的作用,类似于创建了一个线程异步操作,这一点可以了解一下一款优秀的并发框架(Disruptor),据说是每秒可以处理十万级数据, 目前据本人 ...
- echo常用操作
echo -n 不换行输出 [root@C ~]# echo -n "peter" ; echo "linux" peterlinux echo -e 输出转义 ...