Codeforces 1000F One Occurrence 主席树|| 离线+线段树
为什么我半年前这么菜呀, 这种场只A三题。。。
我们在主席树 || 线段树上维护每个数的右边和它一样的数在哪里, 然后就变成了区间求最大值。
注意加进去的时候要把它右边一样的数的信息删掉。
我懒得离线数据就写了个主席树。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ull unsigned long long using namespace std; const int N = 5e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ;
const double eps = 1e-;
const double PI = acos(-); int n, cnt, rt[N], b[N];
int Map[N]; struct node {
PII v;
int ls, rs;
} a[N * ]; void build(int l, int r, int& x) {
x = ++cnt;
if(l == r) {
a[x].v = mk(, l);
return;
}
int mid = l + r >> ;
build(l, mid, a[x].ls);
build(mid + , r, a[x].rs);
a[x].v = max(a[a[x].ls].v, a[a[x].rs].v);
} void update(int p, int val, int l, int r, int& x, int y) {
x = ++cnt; a[x] = a[y];
if(l == r) {
a[x].v.fi = val;
return;
}
int mid = l + r >> ;
if(p <= mid) update(p, val, l, mid, a[x].ls, a[y].ls);
else update(p, val, mid + , r, a[x].rs, a[y].rs);
a[x].v = max(a[a[x].ls].v, a[a[x].rs].v);
} PII query(int L, int R, int l, int r, int x) {
if(l >= L && r <= R) return a[x].v;
int mid = l + r >> ;
if(R <= mid) return query(L, R, l, mid, a[x].ls);
else if(L > mid) return query(L, R, mid + , r, a[x].rs);
else return max(query(L, R, l, mid, a[x].ls), query(L, R, mid + , r, a[x].rs));
} int main() {
scanf("%d", &n);
for(int i = ; i <= n; i++) scanf("%d", &b[i]);
for(int i = ; i <= ; i++) Map[i] = n + ;
build(, n, rt[n+]);
for(int i = n; i >= ; i--) {
update(i, Map[b[i]], , n, rt[i], rt[i + ]);
if(Map[b[i]] <= n) update(Map[b[i]], , , n, rt[i], rt[i]);
Map[b[i]] = i;
}
int q; scanf("%d", &q);
while(q--) {
int L, R; scanf("%d%d", &L, &R);
PII tmp = query(L, R, , n, rt[L]);
if(tmp.fi <= R) puts("");
else printf("%d\n", b[tmp.se]);
}
return ;
} /*
*/
Codeforces 1000F One Occurrence 主席树|| 离线+线段树的更多相关文章
- HDU 4605 Magic Ball Game (在线主席树|| 离线 线段树)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题意:给出一棵二叉树,每个结点孩子数目为0或者2. ...
- hdu4348 To the moon (主席树 || 离线线段树)
Problem Description Background To The Moon is a independent game released in November 2011, it is a ...
- POJ 2104 K-th Number ( 求取区间 K 大值 || 主席树 || 离线线段树)
题意 : 给出一个含有 N 个数的序列,然后有 M 次问询,每次问询包含 ( L, R, K ) 要求你给出 L 到 R 这个区间的第 K 大是几 分析 : 求取区间 K 大值是个经典的问题,可以使用 ...
- codeforces 1000F One Occurrence(线段树、想法)
codeforces 1000F One Occurrence 题意 多次询问lr之间只出现过一次的数是多少. 题解 将查询按照左端点排序,对于所有值维护它在当前位置后面第二次出现是什么时候,那么查询 ...
- BZOJ 3626 [LNOI2014]LCA 树剖+(离线+线段树 // 在线+主席树)
BZOJ 4012 [HNOI2015]开店 的弱化版,离线了,而且没有边权(长度). 两种做法 1 树剖+离线+线段树 这道题求的是一个点zzz与[l,r][l,r][l,r]内所有点的lcalca ...
- dfs序+主席树 或者 树链剖分+主席树(没写) 或者 线段树套线段树 或者 线段树套splay 或者 线段树套树状数组 bzoj 4448
4448: [Scoi2015]情报传递 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 588 Solved: 308[Submit][Status ...
- Codeforces VK CUP 2015 D. Closest Equals(线段树+扫描线)
题目链接:http://codeforces.com/contest/522/problem/D 题目大意: 给你一个长度为n的序列,然后有m次查询,每次查询输入一个区间[li,lj],对于每一个查 ...
- hdu 4288 离线线段树+间隔求和
Coder Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- bzoj2333 离线 + 线段树
https://www.lydsy.com/JudgeOnline/problem.php?id=2333 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来 ...
随机推荐
- javaBean的相关知识和应用
javaBean JavaBean 简介 JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一 ...
- WIN10下安装USB转串口驱动出现“文件的哈希值不在指定的目录”的解决办法
今天安装openJTAG驱动时出现“文件的哈希值不在指定的目录”,系统为WIN10专业版. 原因是驱动无数字签名,在WIN10中是不安全的驱动,所以显示哈希值不在范围内不能安装. 经查阅已经解决,发放 ...
- comfirm和prompt的区别
comfirm和prompt的区别. <html> <title>测试页面</title> <head> </head> <body& ...
- python中dir(),__dict__
dir()是python的一个函数, dir()函数如果接受的参数是一个类,则返回这个类所有的类变量和方法 dir()函数如果接收的参数是一个类的实例,则返回这个实例所有的实例变量,对应的类的类变量, ...
- libSVM在matlab下的使用安装
1) 从LIBSVM的官网http://www.csie.ntu.edu.tw/~cjlin/libsvm/上下载最新版本的LIBSVM,当前版本为libsvm-3.18.zip 2) 解压压缩包到电 ...
- Linux磁盘分区、挂载
⒈Linux下磁盘说明 1)Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘. 2)对于IDE硬盘,使用“hdx~”标识符,“hd”代表IDE硬盘. 对于SCSI硬盘,使用“sd ...
- C++学习5-面向对象编程基础(构造函数、转换构造、静态数据成员、静态成员函数、友元)
知识点学习 类 const作用 C语言的const限定符的含义为"一个不能改变值的变量",C++的const限定符的含义为"一个有类型描述的常量": const ...
- linux服务器last查看关机记录
1.查看重启记录 last reboot命令 [root@test ~]# last reboot reboot system boot -.el6.x Mon May : - : (+:) rebo ...
- 如何解决OpenStack创建虚拟机或删除虚拟机时一直处于deleting或者creating状态的问题(转载)
原文地址:http://www.cnblogs.com/robertoji/p/4968280.html 在OpenStack使用时,有时候会遇到创建虚拟机或者删除虚拟机无法成功创建或者删除的时候,一 ...
- vuejs初学入门环境搭建
一.Nodejs: 1.安装下载:http://nodejs.cn/download/ 2.Node.js安装配置: http://www.runoob.com/nodejs/nodejs ...