离线+线段树


  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

7 5
0 2 1 0 1 3 2
1 3
2 3
1 4
3 6
2 7

Sample Output

3
0
3
2
4

HINT

Source

[Submit][Status][Discuss]

【BZOJ】【3339】Rmq Problem的更多相关文章

  1. 【题解】BZOJ3489 A Hard RMQ problem(主席树套主席树)

    [题解]A simple RMQ problem 占坑,免得咕咕咕了,争取在2h内写出代码 upd:由于博主太菜而且硬是要用指针写两个主席树,所以延后2hQAQ upd:由于博主太菜而且太懒所以他决定 ...

  2. BZOJ 3339 && luogu4137 Rmq Problem / mex(莫队)

    P4137 Rmq Problem / mex 题目描述 有一个长度为n的数组{a1,a2,-,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 输入输出格式 输入格式: 第一行n,m. ...

  3. 主席树||可持久化线段树+离散化 || 莫队+分块 ||BZOJ 3585: mex || Luogu P4137 Rmq Problem / mex

    题面:Rmq Problem / mex 题解: 先离散化,然后插一堆空白,大体就是如果(对于以a.data<b.data排序后的A)A[i-1].data+1!=A[i].data,则插一个空 ...

  4. 【kd-tree】bzoj3489 A simple rmq problem

    Orz zyf教给蒟蒻做法 蒟蒻并不会这题正解……(可持久化树套树?...Orz 对于每个点,我们可以求出pre[i],nex[i],那么询问的答案就是:求max (a[i]),其中 i 满足(pre ...

  5. 【Bzoj 1835 基站选址】

    基站选址的区间里隐藏着DP优化的机密…… 分析:       不论是做过乘积最大还是石子合并,或者是其他的入门级别的区间DP题目的人呐,大米并认为读题后就能够轻松得出一个简洁明了的Dp转移方程.    ...

  6. 【BZOJ 2744 朋友圈】

    Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1570  Solved: 532[Submit][Status][Discuss] Descripti ...

  7. 【BZOJ 5038 不打兔子】

    Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 22  Solved: 8[Submit][Status][Discuss] Description 勤 ...

  8. 【BZOJ 1088 扫雷Mine】模拟

    http://www.lydsy.com/JudgeOnline/problem.php?id=1088 2*N的扫雷棋盘,第二列的值a[i]记录第 i 个格子和它8连通的格子里面雷的数目. 第一列的 ...

  9. 【BZOJ做题记录】07.07~?

    在NOI一周前重开一个坑 最后更新时间:7.08 07:38 7.06 下午做的几道CQOI题: BZOJ1257: [CQOI2007]余数之和sum:把k mod i写成k-k/i*i然后分段求后 ...

  10. 【bzoj5050】【bzoj九月月赛H】建造摩天楼

    讲个笑话,这个题很休闲的. 大概是这样的,昨天看到这个题,第一眼星际把题目看反了然后感觉这是个傻逼题. 后来发现不对,这个修改一次的影响是很多的,可能导致一个数突然可以被改,也可能导致一个数不能被改. ...

随机推荐

  1. Element-ui el-cascader不触发prop?

    html代码: <el-form label-position="right" label-width="100px" :model="form ...

  2. Android-Service和Thread

    Android-Service和Thread 学习自 郭霖的博客 服务是运行在主线程上的 可能在我们第一次接触到Service的时候都是对于 __服务是运行在主线程上的 __这一现象不太理解,但是事实 ...

  3. ARP欺骗防御工具arpon

    ARP欺骗防御工具arpon   ARP欺骗是局域网最为常见的中人间攻击实施方式.Kali Linux提供一款专用防御工具arpon.该工具提供三种防御方式,如静态ARP防御SARPI.动态ARP防御 ...

  4. Kali Linux 2017.3发布了

     Kali Linux 2017.3发布了 Kali Linux官方在11月21日发布Kali Linux 2017的第三个版本2017.3.这次发布变化相对不大,主要是设置面板风格发生改变,增加少量 ...

  5. [BZOJ3757]苹果树(树上莫队)

    树上莫队共有三种写法: 1.按DFS序列分块,和普通莫队类似.常数大,不会被卡. 2.按块状树的方式分块.常数小,会被菊花图卡到O(n). 3.按[BZOJ1086]王室联邦的方式分块.常数小,不会被 ...

  6. Loj 10211 sumdiv

    题目描述 求 A^B 的所有约数之和 mod 9901. 首先,我们要求出A的约数之和. 就是把A分解质因数,成为:a1^k1*a2^k2*a3^k2.... 然后约数和就是(a1^0+a1^1+a1 ...

  7. MySQL分析数据运行状态【SHOW PROCESSLIST】

    这个博文,将只是简单的记录一下,我们的数据库操作和使用中,加索引加不上去,分析的过程,其实比较简单,就是看有没有连接进程还在操作表.有的话,将其停掉(不影响业务的场景下). 今天的主角是: SHOW ...

  8. PHPWord 打印 快递单/合同

    打印快递单有个特点: 被打印纸的背景是固定的, 你只能 在合适的位置输入快递单的内容,操作步骤如下: 1.制作 word 模板 参考文章 “图解如何用打印机套打快递单” 2.在 模板 中放置“占位符” ...

  9. 《Go语言实战》摘录:6.1 并发 - 并行 与 并发

    6.1 并行 与 并发

  10. In-Place upgrade to Team Foundation Server (TFS) 2015 from TFS 2013Team Foundation Server TFS TFS 2015 TFS upgrade TFS with Sharepoint

    This upgrade document gives detailed step by step procedure for the In-Place upgrade from TFS 2013 t ...