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. Entity Framework 6.0 Code First(转)

    源自:http://www.cnblogs.com/panchunting/tag/Code%20First/ 1 Conventions 2 Custom Conventions 3 Data An ...

  2. UUID 压缩为22位

    public class Generator { private static char[] BASE64 = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJK ...

  3. RabbitMQ---2、介绍

    1.背景 RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现. 2.应用场景 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信, ...

  4. Restful的优势

    1. 轻量,直接基于http,不在需要任何别的诸如消息协议.get/post/put/delete为CRUD操作2. 面向资源,一目了然,具有自解释性.3. 数据描述简单,一般以xml,json做数据 ...

  5. Linux下一个最简单的不依赖第三库的的C程序(1)

    如下代码是一段汇编代码,虽然标题中使用了C语言这个词语,但下面确实是一段汇编代码,弄清楚了这个代码,后续的知识点才会展开. simple_asm.s: #PURPOSE: Simple program ...

  6. webpack执行过程

    webpack-cli 执行过程 1.webpack.config.js,shell options参数解析 2.new webpack(options) 3.run() 编译的入口方法 4.comp ...

  7. mybatis三种传值方式

    第一种:按序列传参(dao层的函数方法)[sql] Public User selectUser(String name,String area); 对应的Mapper.xml [sql] <s ...

  8. apache配置域名访问本地空间

    1. 首先修改C盘WINDOWS\system32\drivers\etc目录下的 hosts 文件,用记事本打开,加入: 127.0.0.1 www.a.com hosts文件是用来解析的,你在浏览 ...

  9. Oracle 截取指定长度的字符

    去掉回车,换行符号,截取指定长度的字符 具体代码示例: --Function --去掉前后空格,截取字符,字符长度为P_Length create or replace function get_St ...

  10. The difference between a local variable and a member variable

    package com.itheima_04; /* * 成员变量和局部变量的区别: * A:在类中的位置不同 * 成员变量:类中,方法外 * 局部变量:方法中或者方法声明上(形式参数) * B:在内 ...