这题我是离线做的

设i位置的数上次出现的位置是pre[i](如果第一次出现那就是0)

可以想到,用线段树维护一个区间的pre的最小值,如果它小于区间左端点,那这个数就是一个合法的答案

但直接这样做是错的

考虑1,2,3,4,[1,1],5,虽然前一个1的pre在区间外面,但他后面还有一个1啊

所以可以按照询问的右端点排序,推着来维护这个最小值

具体来说,对于i,先把i位置的值改成pre[i],然后如果有pre[i],那把pre[i]位置的值改成inf(一开始都要初始化成inf)

然后再查的话,我查到的就都是这个区间里的最后一次出现的那个数了,就不会有锅

 #include<bits/stdc++.h>
#define pa pair<int,int>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=5e5+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int N,Q,pre[maxn],A[maxn],tmp[maxn],ans[maxn];
pa mn[maxn<<];
struct Node{
int l,r,i;
}que[maxn]; inline bool cmp(Node a,Node b){return a.r<b.r;}; inline void update(int p){
mn[p]=min(mn[p<<],mn[p<<|]);
} void change(int p,int l,int r,int x,int y){
if(l==r) mn[p]=make_pair(y,x);
else{
int m=l+r>>;
if(x<=m) change(p<<,l,m,x,y);
else change(p<<|,m+,r,x,y);
update(p);
}
} pa query(int p,int l,int r,int x,int y){
if(x<=l&&r<=y) return mn[p];
int m=l+r>>;pa re=make_pair(N+,);
if(x<=m) re=query(p<<,l,m,x,y);
if(y>=m+) re=min(re,query(p<<|,m+,r,x,y));
return re;
} int main(){
int i,j,k;
N=rd();
for(i=;i<=N;i++){
A[i]=rd();
pre[i]=tmp[A[i]],tmp[A[i]]=i;
}Q=rd();
for(i=;i<=Q;i++){
que[i].l=rd(),que[i].r=rd(),que[i].i=i;
}sort(que+,que+Q+,cmp);
CLR(mn,);
for(i=,j=;i<=Q;i++){
for(;j<=que[i].r&&j<=N;j++){
if(pre[j]) change(,,N,pre[j],N+);
change(,,N,j,pre[j]);
}
pa re=query(,,N,que[i].l,que[i].r);
if(re.first<que[i].l) ans[que[i].i]=A[re.second];
}
for(i=;i<=Q;i++) printf("%d\n",ans[i]);
return ;
}

cf1000F One Occurrence (线段树)的更多相关文章

  1. cf1000F. One Occurrence(线段树 set)

    题意 题目链接 Sol (真后悔没打这场EDU qwq) 首先把询问离线,预处理每个数的\(pre, nxt\),同时线段树维护\(pre\)(下标是\(pre\),值是\(i\)),同时维护一下最大 ...

  2. HDU-6704 K-th occurrence (后缀自动机father树上倍增建权值线段树合并)

    layout: post title: HDU-6704 K-th occurrence (后缀自动机father树上倍增建权值线段树合并) author: "luowentaoaa&quo ...

  3. Sum of Squares of the Occurrence Counts解题报告(后缀自动机+LinkCutTree+线段树思想)

    题目描述 给定字符串\(S(|S|\le10^5)\),对其每个前缀求出如下的统计量: 对该字符串中的所有子串,统计其出现的次数,求其平方和. Sample Input: aaa Sample Out ...

  4. F - One Occurrence CodeForces - 1000F (线段树+离线处理)

    You are given an array aa consisting of nn integers, and qq queries to it. ii-th query is denoted by ...

  5. HDU - 6704 K-th occurrence (后缀数组+主席树/后缀自动机+线段树合并+倍增)

    题意:给你一个长度为n的字符串和m组询问,每组询问给出l,r,k,求s[l,r]的第k次出现的左端点. 解法一: 求出后缀数组,按照排名建主席树,对于每组询问二分或倍增找出主席树上所对应的的左右端点, ...

  6. K-th occurrence HDU - 6704 (后缀数组+二分线段树+主席树)

    大意: 给定串s, q个询问(l,r,k), 求子串s[l,r]的第kk次出现位置. 这是一篇很好的题解: https://blog.csdn.net/sdauguanweihong/article/ ...

  7. hdu6704 2019CCPC网络选拔赛1003 K-th occurrence 后缀自动机+线段树合并

    解题思路: fail树上用权值线段树合并求right/endpos集合,再用倍增找到待查询串对应节点,然后权值线段树求第k大. #include<bits/stdc++.h> using ...

  8. hdu 6704 K-th occurrence(后缀数组+可持久化线段树)

    Problem Description You are given a string S consisting of only lowercase english letters and some q ...

  9. hdu 4117 -- GRE Words (AC自动机+线段树)

    题目链接 problem Recently George is preparing for the Graduate Record Examinations (GRE for short). Obvi ...

随机推荐

  1. 正则校验:微信号,qq号,邮箱

    java判断微信号.手机.名字的正则表达 - willgos - 博客园https://www.cnblogs.com/solossl/p/5813106.html 微信号正则校验,qq正则,邮箱正则 ...

  2. asp.net mvc 三种过滤器

    前几天面试遇到这个问题,发现不是很了解,学习了下,这里记录下来 经常需要将用户的操作记录到日志中,或者是验证用户是否登录了网站, 面对这样的需求,以前的操作是自定义一个统一的全局方法,然后做处理, 在 ...

  3. 关于PHP批量图片格式转换的问题--本文转成webp, 其他过程格式一样

    最近要把项目中的图片全部生成webp格式, 过程整理一下,    (直接存在本地,或者图片链接存在数据库都可以看看) 首先,肯定是批量处理, 一个php处理不了这么多, 会爆内存的, 个人建议用aja ...

  4. Windows NT 的历史

    Windows NT 的版本历史 https://blog.csdn.net/flyingpig2016/article/details/53282895/ 按照自己找到的资料:windows NT ...

  5. 极验3.0滑动拼图验证的使用--java

    [ 前言: 在登录其他网站的时候,看到有个滑动拼图的验证觉得挺好玩的,以前做一个图片验证的小demo,现在发现很多网站都开始流行滑动拼图的验证了,今天也想自己动手来弄一个. 废话不多说,开始撸起来! ...

  6. 解决ERROR 1130: Host '192.168.11.1' is not allowed to connect to this MySQL

    使用navicat进行远程登录MySQL时,报出 ERROR 1130: Host '192.168.11.1' is not allowed to connect to this MySQL  se ...

  7. git简介及安装(win10)

    一句话介绍git Git是Linus Torvalds编写,目前是世界上最先进的分布式版本控制系统. git能干什么? 代码备份.还原,版本管理,分支管理,解决冲突,协同开发... 安装git > ...

  8. k8s使用glusterfs做存储

    一.安装glusterfs https://www.cnblogs.com/zhangb8042/p/7801181.html 环境介绍; centos 7 [root@k8s-m ~]# cat / ...

  9. linux服务器运维

    1. grep正则匹配 grep -E  "([0-9]{1,3}\.){4}" filepath egrep "([0-9]{1,3}\.){4}"  fil ...

  10. UML符号

    转抄, 语言简练. 挺好. -------------------  -------------------  -------------------  -------------------  -- ...