离线+线段树


  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. Cookie安全漫谈(转)

    add by zhj: 我也同意作者的观点,JavaScript 操作 Cookie 是一种不正常的做法:可以用 JavaScript 操作 Cookie 完成的功能,一样可以在服务端来完成. js操 ...

  2. Python3 反向传播神经网络-Min-Batch(根据吴恩达课程讲解编写)

    # -*- coding: utf-8 -*- """ Created on Sat Jan 20 13:47:54 2018 @author: markli " ...

  3. js冲刺一下

    js中__proto__和prototype的区别和关系 1.对象有属性__proto__,指向该对象的构造函数的原型对象. 2.方法除了有属性__proto__,还有属性prototype,prot ...

  4. js数据结构之链表(单链表、双向链表、循环链表)

    首先,链表有以下特点: 1. 存储空间不固定,可灵活扩充 2.方便多次的插入和删除,效率较高 单链表 单链表是最常用的链表,其对数据的操作均为单项的,向后查找的. /* 链表(基于对象) 此处为单链表 ...

  5. 决策树ID3算法--python实现

    参考: 统计学习方法>第五章决策树]   http://pan.baidu.com/s/1hrTscza 决策树的python实现     有完整程序     决策树(ID3.C4.5.CART ...

  6. jQuery方法实现

    children 原生JavaScript中,如果希望找到某个元素的子元素,只能通过Node类型上的children方法一步一步获取.如 let li = document.querySelector ...

  7. 让nginx支持HLS

    准备工作: 1.安装nginx和rtmp模块 2.安装ffmepg(用来推流) 以上准备工作参见这篇博客:http://www.cnblogs.com/damiao/p/5231221.html 1. ...

  8. Kernel 4.9的BBR拥塞控制算法与锐速

    重要的事情说三遍! BBR并不能突破带宽限制!!! BBR并不能突破带宽限制!!! BBR并不能突破带宽限制!!! 它的功能如下: 1.在高丢包率与低速率的网络中提升传输效果,充分利用带宽. 2.降低 ...

  9. Java Web c3p0 pool池泄漏优化与日志分析

    问题跟踪: 近期在整合SSH(spring.springmvc.hibernate)项目,提供给第三方服务.每当调用内存池达到上限之后,外界调用服务直接失败,提示[cannot open connec ...

  10. 一、java概述

    一.概述 java不仅仅是一门编程语言,还是一个由一系列计算机软件和规范形成的技术体系. 提供了完整的开发和跨平台部署的支持环境.用途广泛.     结构严谨.面向对象.摆脱硬件平台的束缚.     ...