题面

Vjudge

Sol

给一个数列,有m个询问,每次问数列[l,r]区间中所有数的第一次出现的位置的中位数是多少,强制在线

主席树

询问区间内不同的数的个数

树上二分找到那个中位数

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int _(2e5 + 5);
const int __(8e6); IL int Input(){
RG int x = 0, z = 1; RG char c = getchar();
for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
return x * z;
} int n, m, rt[_], tot, o[_], len, a[_], vis[_];
struct HJT{
int ls, rs, sz;
} T[__]; IL void Modify(RG int &x, RG int l, RG int r, RG int p, RG int v){
T[++tot] = T[x], T[x = tot].sz += v;
if(l == r) return;
RG int mid = (l + r) >> 1;
if(p <= mid) Modify(T[x].ls, l, mid, p, v);
else Modify(T[x].rs, mid + 1, r, p, v);
} IL int Query(RG int x, RG int l, RG int r, RG int L, RG int R){
if(!x) return 0;
if(L <= l && R >= r) return T[x].sz;
RG int mid = (l + r) >> 1, ret = 0;
if(L <= mid) ret = Query(T[x].ls, l, mid, L, R);
if(R > mid) ret += Query(T[x].rs, mid + 1, r, L, R);
return ret;
} IL int Calc(RG int x, RG int l, RG int r, RG int k){
if(l == r) return l;
RG int mid = (l + r) >> 1, s = T[T[x].ls].sz;
if(k <= s) return Calc(T[x].ls, l, mid, k);
return Calc(T[x].rs, mid + 1, r, k - s);
} int main(RG int argc, RG char* argv[]){
for(RG int t = Input(), Case = 1; Case <= t; ++Case){
Fill(T, 0), Fill(rt, 0), Fill(vis, 0), tot = 0;
n = Input(), m = Input();
for(RG int i = 1; i <= n; ++i) o[i] = a[i] = Input();
sort(o + 1, o + n + 1), len = unique(o + 1, o + n + 1) - o - 1;
for(RG int i = n; i; --i){
a[i] = lower_bound(o + 1, o + len + 1, a[i]) - o;
rt[i] = rt[i + 1];
if(!vis[a[i]]) vis[a[i]] = i, Modify(rt[i], 1, n, i, 1);
else{
Modify(rt[i], 1, n, vis[a[i]], -1);
vis[a[i]] = i;
Modify(rt[i], 1, n, i, 1);
}
}
printf("Case #%d:", Case);
for(RG int i = 1, ans = 0; i <= m; ++i){
RG int l = Input(), r = Input(), ql, qr, num;
ql = min((l + ans) % n + 1, (r + ans) % n + 1);
qr = max((l + ans) % n + 1, (r + ans) % n + 1);
num = Query(rt[ql], 1, n, ql, qr);
printf(" %d", ans = Calc(rt[ql], 1, n, (num + 1) >> 1));
}
puts("");
}
return 0;
}

HDU5919:Sequence II的更多相关文章

  1. [HDU5919]Sequence II

    [HDU5919]Sequence II 试题描述 Mr. Frog has an integer sequence of length n, which can be denoted as a1,a ...

  2. HDU 5919 Sequence II 主席树

    Sequence II Problem Description   Mr. Frog has an integer sequence of length n, which can be denoted ...

  3. HDU 5919 Sequence II(主席树+逆序思想)

    Sequence II Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) To ...

  4. HDOJ 5147 Sequence II 树阵

    树阵: 每个号码的前面维修比其数数少,和大量的这后一种数比他的数字 再枚举每一个位置组合一下 Sequence II Time Limit: 5000/2500 MS (Java/Others)    ...

  5. hdu 5147 Sequence II 树状数组

    Sequence II Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Prob ...

  6. hdu 5147 Sequence II (树状数组 求逆序数)

    题目链接 Sequence II Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. hdu 5147 Sequence II【树状数组/线段树】

    Sequence IITime Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...

  8. bestcoder#23 1002 Sequence II 树状数组+DP

    Sequence II Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. LeetCode:课程表II【210】

    LeetCode:课程表II[210] 题目描述 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一 ...

随机推荐

  1. fifteen-puzzle

    http://www.math.ubc.ca/~cass/courses/m308-02b/projects/grant/fifteen.html http://jamie-wong.com/2011 ...

  2. PHPUnit 手册

    PHPUnit 手册 Sebastian Bergmann 版权 © 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 ...

  3. jersey2.26+spring5+jpa一步步搭建restful服务

    前言 首先,为什么想选择Jersey做restful服务呢?我个人比较喜欢它的插件化设计,可以方便的注入自己的全局处理逻辑.再一个就是可以生成wadl描述文件,供查询服务方法.所以在学习spring的 ...

  4. Mac下使用SSH(密钥)访问Github

    1,终端中输入:cd ~/.ssh 如果出现 -bash: cd: /Users/glamor/.ssh: No such file or directory,说明你之前没有用过.直接执行第二步. 如 ...

  5. Samba服务器的安装与配置

    Samba服务器主要的功能是实现本地windows系统下方便读写局域网内虚拟机下的文件: Samba与window连接需要使用NetBIOS协议,请确认你的Windows系统已经安装了NetBIOS协 ...

  6. HDU - 1172

    思路:假设答案是x,那么x必定满足所有语句给定的条件.例如3585和4815就有2个相同的数,1和相同的位. 只要这个数满足所有条件,那么就是一个可能的答案,当答案数量超过1个时,就是"No ...

  7. R语言·文本挖掘︱Rwordseg/rJava两包的安装(安到吐血)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言·文本挖掘︱Rwordseg/rJava ...

  8. 航空客户价值分析特色LRFMC模型——RFM升级

    本文转载自微信公众号TIpDM. 每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 我们说RFM ...

  9. R语言︱排序问题

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 数据排序 1.sort(),rank(),or ...

  10. final、finally和finalize的区别

    final.finally和finalize的区别 这三者的区别可以从两个方面来说 1.意思解释方面 (1)final是修饰符(关键字) (2)finally是异常处理中的程序块 (3)finaliz ...