【BZOJ】【3339】Rmq Problem
离线+线段树
Orz Hzwer,引用题解:
这一题在线似乎比较麻烦
至于离线。。
首先按照左端点将询问排序
然后一般可以这样考虑
首先如何得到1-i的sg值呢
这个可以一开始扫一遍完成
接着考虑l-r和l+1-r的答案有何不同
显然是l-next[l]-1这一段所有sg值大于a[l]的变为a[l]
这一步如果暴力修改的话只有30分
但是修改区间我们可以想到线段树,这样就能a了
晚上写题有点晕……忘了把当前时刻now置为q[i].l了,这种傻逼错误居然也犯……
/**************************************************************
Problem: 3339
User: Tunix
Language: C++
Result: Accepted
Time:1444 ms
Memory:11432 kb
****************************************************************/ //BZOJ 3339
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=2e5+,INF=1e9;
/*******************template********************/ int n,m,a[N],mark[N],sg[N],ans[N],last[N],nxt[N];
struct ques{
int l,r,num;
}q[N];
bool operator < (ques a,ques b){return a.l<b.l || (a.l==b.l && a.r<b.r);} int t[N<<];
#define L (o<<1)
#define R (o<<1|1)
#define mid (l+r>>1)
#define lch L,l,mid
#define rch R,mid+1,r
void Push_down(int o){
if (t[o]!=INF){
t[L]=min(t[L],t[o]); t[R]=min(t[R],t[o]);
t[o]=INF;
}
}
void build(int o,int l,int r){
if (l==r) t[o]=sg[l];
else{
t[o]=INF;
build(lch); build(rch);
}
}
void update(int o,int l,int r,int ql,int qr,int v){
if (ql<=l && qr>=r) t[o]=min(t[o],v);
else{
Push_down(o);
if (ql<=mid) update(lch,ql,qr,v);
if (qr>mid) update(rch,ql,qr,v);
}
}
int query(int o,int l,int r,int pos){
if (l==r) return t[o];
else{
Push_down(o);
if (pos<=mid) return query(lch,pos);
else return query(rch,pos);
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("3339.in","r",stdin);
freopen("3339.out","w",stdout);
#endif
n=getint(); m=getint();
F(i,,n) a[i]=getint();
int k=;
F(i,,n){
mark[a[i]]=;
if (a[i]==k) while(mark[k]) k++;
sg[i]=k;
}
build(,,n);
D(i,n,){
nxt[i]=last[a[i]];
last[a[i]]=i;
}
F(i,,m){
q[i].l=getint(); q[i].r=getint(); q[i].num=i;
}
sort(q+,q+m+);
int now=;
F(i,,m){
F(j,now,q[i].l-){
if (!nxt[j]) nxt[j]=n+;
update(,,n,j,nxt[j]-,a[j]);
}
now=q[i].l;
ans[q[i].num]=query(,,n,q[i].r);
}
F(i,,m) printf("%d\n",ans[i]);
return ;
}
3339: Rmq Problem
Time Limit: 20 Sec Memory Limit: 128 MB
Submit: 683 Solved: 328
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
0 2 1 0 1 3 2
1 3
2 3
1 4
3 6
2 7
Sample Output
0
3
2
4
HINT
Source
【BZOJ】【3339】Rmq Problem的更多相关文章
- 【题解】BZOJ3489 A Hard RMQ problem(主席树套主席树)
[题解]A simple RMQ problem 占坑,免得咕咕咕了,争取在2h内写出代码 upd:由于博主太菜而且硬是要用指针写两个主席树,所以延后2hQAQ upd:由于博主太菜而且太懒所以他决定 ...
- BZOJ 3339 && luogu4137 Rmq Problem / mex(莫队)
P4137 Rmq Problem / mex 题目描述 有一个长度为n的数组{a1,a2,-,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 输入输出格式 输入格式: 第一行n,m. ...
- 主席树||可持久化线段树+离散化 || 莫队+分块 ||BZOJ 3585: mex || Luogu P4137 Rmq Problem / mex
题面:Rmq Problem / mex 题解: 先离散化,然后插一堆空白,大体就是如果(对于以a.data<b.data排序后的A)A[i-1].data+1!=A[i].data,则插一个空 ...
- 【kd-tree】bzoj3489 A simple rmq problem
Orz zyf教给蒟蒻做法 蒟蒻并不会这题正解……(可持久化树套树?...Orz 对于每个点,我们可以求出pre[i],nex[i],那么询问的答案就是:求max (a[i]),其中 i 满足(pre ...
- 【Bzoj 1835 基站选址】
基站选址的区间里隐藏着DP优化的机密…… 分析: 不论是做过乘积最大还是石子合并,或者是其他的入门级别的区间DP题目的人呐,大米并认为读题后就能够轻松得出一个简洁明了的Dp转移方程. ...
- 【BZOJ 2744 朋友圈】
Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 1570 Solved: 532[Submit][Status][Discuss] Descripti ...
- 【BZOJ 5038 不打兔子】
Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 22 Solved: 8[Submit][Status][Discuss] Description 勤 ...
- 【BZOJ 1088 扫雷Mine】模拟
http://www.lydsy.com/JudgeOnline/problem.php?id=1088 2*N的扫雷棋盘,第二列的值a[i]记录第 i 个格子和它8连通的格子里面雷的数目. 第一列的 ...
- 【BZOJ做题记录】07.07~?
在NOI一周前重开一个坑 最后更新时间:7.08 07:38 7.06 下午做的几道CQOI题: BZOJ1257: [CQOI2007]余数之和sum:把k mod i写成k-k/i*i然后分段求后 ...
- 【bzoj5050】【bzoj九月月赛H】建造摩天楼
讲个笑话,这个题很休闲的. 大概是这样的,昨天看到这个题,第一眼星际把题目看反了然后感觉这是个傻逼题. 后来发现不对,这个修改一次的影响是很多的,可能导致一个数突然可以被改,也可能导致一个数不能被改. ...
随机推荐
- [java] DOS编译 .java 文件得到 .class 文件 并执行 以及使用外部 .jar包 时的命令
当写一个java文件后,在DOS中进行编译与执行时,如果没有引入外来的包,那情况很简单 例如: public class hello_world { public static void main(S ...
- java线程中断的办法
目录 中断线程相关的方法 中断线程 for循环标记退出 阻塞的退出线程 使用stop()方法停止线程 中断线程相关的方法 中断线程有一些相应的方法,这里列出来一下. 注意,如果是Thread.meth ...
- ref:linux用户和组管理,/etc/passwd,/etc/shadow和/etc/group 文件内容解释
ref:https://www.cnblogs.com/xuha0/p/5519232.html 与用户相关的系统配置文件主要有/etc/passwd 和/etc/shadow,其中/etc/shad ...
- Python3 贝叶斯分类
# -*- coding: utf-8 -*- """ Created on Tue Jan 16 20:11:07 2018 @author: markli " ...
- luogu [TJOI2007]线段
题目链接 luogu [TJOI2007]线段 题解 dp[i][0/1]第i行在左/右端点的最短路 瞎转移 代码 #include<bits/stdc++.h> using namesp ...
- maven执行update命令时报org/apache/maven/shared/filtering/MavenFilteringException错误
原 maven执行update命令时报org/apache/maven/shared/filtering/MavenFilteringException错误 在eclipse中对准项目执行maven- ...
- x270
https://thinkpad.lenovo.com.cn/product/93964.html
- hdu5094 Maze
--就是爬管道-- 还好内存给的多-- 不然就不会做了-- #include<iostream> #include<map> #include<string> #i ...
- CAS服务器配置
参考文献: http://sucre.blog.51cto.com/1084905/683624 1.安装部署CAS Server 从官网下载CAS Server,今天发现CAS Server的官网居 ...
- 防止shell脚本长时间执行导致ssh超时
在一些对安全性要求较高的场景下.ssh的超时时间是管理员预先设置好的,在闲置一段时间后ssh连接会自己主动断开. 这样的情况下假设通过ssh运行脚本,而脚本运行时间又比較长的话.会导致sshclien ...