codeforces 1000F One Occurrence

题意

多次询问lr之间只出现过一次的数是多少。

题解

将查询按照左端点排序,对于所有值维护它在当前位置后面第二次出现是什么时候,那么查询区间最大值即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define rep(i, a, b) for(int i=(a); i<(b); i++)
#define sz(a) (int)a.size()
#define de(a) cout << #a << " = " << a << endl
#define dd(a) cout << #a << " = " << a << " "
#define all(a) a.begin(), a.end()
#define endl "\n"
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
//--- const int N = 500050; int n, m;
int a[N], ans[N], nx[N], vis[N];
bool in[N];
vector<pii> q[N]; struct Seg {
#define ls (rt<<1)
#define rs (ls|1)
static const int N = ::N*4+22;
int ma[N], ind[N];
void upd(int p, int c, int l, int r, int rt) {
if(l == r) {
ma[rt] = c;
ind[rt] = l;
return ;
}
int mid = l+r>>1;
if(p<=mid) upd(p, c, l, mid, ls);
else upd(p, c, mid+1, r, rs);
ma[rt] = max(ma[ls], ma[rs]);
ind[rt] = ma[ls]>ma[rs] ? ind[ls] : ind[rs];
}
void upd(pii &a, pii b) {
if(a < b) a = b;
}
pii qry(int L, int R, int l, int r, int rt) {
if(L<=l && r<=R) return mp(ma[rt], a[ind[rt]]);
int mid = l+r>>1;
pii ans = mp(0, 0);
if(L<=mid) upd(ans, qry(L, R, l, mid, ls));
if(R>=mid+1) upd(ans, qry(L, R, mid+1, r, rs));
return ans;
}
}seg; int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0);
///read
cin >> n;
rep(i, 1, n+1) cin >> a[i];
cin >> m;
rep(i, 1, m+1) {
int x, y;
cin >> x >> y;
q[x].pb(mp(y, i));
}
///solve
for(int i = n; i; --i) {
nx[i] = vis[a[i]];
if(!nx[i]) nx[i] = n+1;
vis[a[i]] = i;
}
memset(vis, 0, sizeof(vis));
rep(i, 1, n+1) vis[nx[i]] = 1;
rep(i, 1, n+1) if(!vis[i]) seg.upd(i, nx[i], 1, n, 1);
rep(i, 1, n+1) {
for(auto t : q[i]) {
auto c = seg.qry(i, t.fi, 1, n, 1);
ans[t.se] = c.fi>t.fi ? c.se : 0;
}
if(nx[i]<=n) seg.upd(nx[i], nx[nx[i]], 1, n, 1);
}
rep(i, 1, m+1) cout << ans[i] << endl;
return 0;
}

codeforces 1000F One Occurrence(线段树、想法)的更多相关文章

  1. Codeforces 1000F One Occurrence 主席树|| 离线+线段树

    One Occurrence 为什么我半年前这么菜呀, 这种场只A三题... 我们在主席树 || 线段树上维护每个数的右边和它一样的数在哪里, 然后就变成了区间求最大值. 注意加进去的时候要把它右边一 ...

  2. Buses and People CodeForces 160E 三维偏序+线段树

    Buses and People CodeForces 160E 三维偏序+线段树 题意 给定 N 个三元组 (a,b,c),现有 M 个询问,每个询问给定一个三元组 (a',b',c'),求满足 a ...

  3. CodeForces 877E DFS序+线段树

    CodeForces 877E DFS序+线段树 题意 就是树上有n个点,然后每个点都有一盏灯,给出初始的状态,1表示亮,0表示不亮,然后有两种操作,第一种是get x,表示你需要输出x的子树和x本身 ...

  4. [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路)

    [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...

  5. [Codeforces 1199D]Welfare State(线段树)

    [Codeforces 1199D]Welfare State(线段树) 题面 给出一个长度为n的序列,有q次操作,操作有2种 1.单点修改,把\(a_x\)修改成y 2.区间修改,把序列中值< ...

  6. [Codeforces 316E3]Summer Homework(线段树+斐波那契数列)

    [Codeforces 316E3]Summer Homework(线段树+斐波那契数列) 顺便安利一下这个博客,给了我很大启发(https://gaisaiyuno.github.io/) 题面 有 ...

  7. Codeforces 1083C Max Mex [线段树]

    洛谷 Codeforces 思路 很容易发现答案满足单调性,可以二分答案. 接下来询问就转换成判断前缀点集是否能组成一条链. 我最初的想法:找到点集的直径,判断直径是否覆盖了所有点,需要用到树套树,复 ...

  8. CodeForces 19D Points(线段树+map)

    开始想不通,后来看网上说是set,就有一个想法是对每个x建一个set...然后又想直接建立两重的set就好,最后发现不行,自己想多了...  题意是给你三种操作:add (x y) 平面添加(x y) ...

  9. Codeforces Gym 100231B Intervals 线段树+二分+贪心

    Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description 给你n个区间,告诉你每个区间内都有ci个数 然后你需要 ...

随机推荐

  1. UVM序列篇之二:sequence和item(上)

    无论是自驾item,穿过sequencer交通站,通往终点driver,还是坐上sequence的大巴,一路沿途观光,最终跟随导游停靠到风景点driver,在介绍如何驾驶item和sequence,遵 ...

  2. i.mx6 Android5.1.1 Zygote

    0. 总结: 0.1 相关源码目录: framework/base/cmds/app_process/app_main.cppframeworks/base/core/jni/AndroidRunti ...

  3. windows 10安装gensim、nltk

    一.安装gensim 1.什么事gensim gensim是一个python的科学库,gensim包含了TF-IDF.随机投影.word2vec和document2vec算法的实现,分层Dirchle ...

  4. echarts实现自动轮播tooltip

    最近需要实现echarts图形中hover效果轮播(即tooltip在各个数据点上轮流显示)的功能,以下就是我学习的一个过程,只是提供思路,具体场景需要自己修改.(仅针对echarts 2.2.7及以 ...

  5. HTML中字体的垂直排列

    1.源代码: <html> <head> </head> <body> <div style="font-size:18px;writi ...

  6. Mysql压缩版forWindows安装与配置

    参考:http://blog.csdn.net/wengengeng/article/details/52013650

  7. RESTful api 设计规范

    该仓库整理了目前比较流行的 RESTful api 设计规范,为了方便讨论规范带来的问题及争议,现把该文档托管于 Github,欢迎大家补充!! Table of Contents RESTful A ...

  8. C++学习笔记: 智能指针

    c++ 智能指针学习新的 class Simple { public: Simple() { number = param; std::cout << "Simple: &quo ...

  9. Code Signal_练习题_Are Similar?

    Two arrays are called similar if one can be obtained from another by swapping at most one pair of el ...

  10. js 控制选中文字

     //脚本获取网页中选中文字 var word = document.selection.createRange().text;  //获取选中文字所在的句子 var range =  documen ...