题目链接:hdu_5919_Sequence II

题意:

给你n个数,m个询问,每次问你一个区间中每一种数在区间中第一次出现的位置的中位数,强制在线。

题解:

一看就是主席树搞,不过这里要询问第一次出现的位置,有个技巧就是倒着将数插进去,如果有相同的数,就把位置靠后的数的贡献取消掉,这样查询的时候就只需要查询root[l]了,因为root[l]包括了l到n的信息,前面已经只保留了相同数的最前面的位置,所以查询一共有多少种数时直接查询root[l]的l到r就行了。

 #include<bits/stdc++.h>
#define F(i,a,b) for(int i=a;i<=b;i++)
using namespace std; const int N=2e5+;
struct node{int l,r,sum;}T[*N]; int t,n,m,a[N],pre[N],root[N],tot,ic=; void update(int &x,int y,int pos,int val,int l=,int r=n)
{
T[++tot]=x?T[x]:T[y],T[tot].sum+=val,x=tot;
if(l==r)return;
int m=l+r>>;
if(pos<=m)update(T[x].l,T[y].l,pos,val,l,m);
else update(T[x].r,T[y].r,pos,val,m+,r);
} int query(int x,int k,int l=,int r=n)
{
if(l==r)return l;
int m=l+r>>;
if(k<=T[T[x].l].sum)return query(T[x].l,k,l,m);
return query(T[x].r,k-T[T[x].l].sum,m+,r);
} int getsum(int x,int L,int R,int l=,int r=n)
{
if(L<=l&&r<=R)return T[x].sum;
int m=l+r>>,ans=;
if(L<=m)ans+=getsum(T[x].l,L,R,l,m);
if(R>m)ans+=getsum(T[x].r,L,R,m+,r);
return ans;
} int main()
{
scanf("%d",&t);
while(t--)
{
printf("Case #%d: ",ic++);
scanf("%d%d",&n,&m);
tot=;
F(i,,n)scanf("%d",a+i);
for(int i=n;i>;i--)
{
if(pre[a[i]])update(root[i],root[i+],pre[a[i]],-);
update(root[i],root[i+],i,);
pre[a[i]]=i;
}
int ans=,l,r,sum;
F(i,,m)
{
scanf("%d%d",&l,&r);
l=(l+ans)%n+,r=(r+ans)%n+;
if(l>r)l^=r,r^=l,l^=r;
sum=getsum(root[l],l,r);
printf("%d%c",ans=query(root[l],sum+>>)," \n"[i==m]);
}
while(tot)T[tot].l=T[tot].r=T[tot].sum=,tot--;
F(i,,n)root[i]=,pre[a[i]]=;
}
return ;
}

hdu_5919_Sequence II(主席树)的更多相关文章

  1. HDU 5919 Sequence II 主席树

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

  2. HDU5919 Sequence II(主席树)

    Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2,⋯,ana1,a2,⋯,anThere are ...

  3. HDU 5919 -- Sequence II (主席树)

    题意: 给一串数字,每个数字的位置是这个数第一次出现的位置. 每个询问对于序列的一个子区间,设一共有k个不同的数,求第ceil(k/2)个数的位置. 因为强制在线,所以离线乱搞pass掉. 主席树可解 ...

  4. hdu 5919--Sequence II(主席树--求区间不同数个数+区间第k大)

    题目链接 Problem Description Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2 ...

  5. Sequence II HDU - 5919(主席树)

    Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2,⋯,ana1,a2,⋯,anThere are ...

  6. HDU 5919 Sequence II(主席树)题解

    题意:有A1 ~ An组成的数组,给你l r,L = min((l + ans[i - 1]) % n + 1, (r + ans[i - 1]) % n + 1),R = max((l + ans[ ...

  7. HDU--5519 Sequence II (主席树)

    题目链接 2016年长春ccpc I 题 题目大意 : 给你n(n≤2∗105n≤2∗105)个数,每个数的大小 0<Ai≤2∗10^5   0<Ai≤2∗10^5. 再给你m(m≤2∗1 ...

  8. HDU 5919 - Sequence II (2016CCPC长春) 主席树 (区间第K小+区间不同值个数)

    HDU 5919 题意: 动态处理一个序列的区间问题,对于一个给定序列,每次输入区间的左端点和右端点,输出这个区间中:每个数字第一次出现的位子留下, 输出这些位子中最中间的那个,就是(len+1)/2 ...

  9. SPOJ3267 D-query 离线+树状数组 在线主席树

    分析:这个题,离线的话就是水题,如果强制在线,其实和离线一个思路,然后硬上主席树就行了 离线的代码 #include <iostream> #include <stdio.h> ...

随机推荐

  1. 常用的HTTP方法

    方法                 描述 是否包含主体 GET  从服务器获得一份文档 否 HEAD  只从服务器获得响应报文的首部 否 POST  向服务器发送需要处理的数据 是 PUT  将请求 ...

  2. 将递归函数非递归化的一般方法(cont)

    本文通过模拟汇编里的stack机制,构建一个自己的stack,然后将上一篇blog末尾的递归函数void bst_walk(bst_node_t *root)非递归化. o libstack.h #i ...

  3. Windows 下 Apache HTTP Server 与 Tomcat 的整合

    整合准备: 1.Apache HTTP Server(下文用Apache简称) 2.Tomcat 7或8 3.mod_jk.so (tomcat-connectors)-这个文件是用来链接http s ...

  4. PHP不使用递归的无限级分类

    不用递归实现无限级分类,简单测试了下性能比递归稍好一点点点,但写得太复杂了,还是递归简单方便点 代码: <?php $list = array( array('id'=>1, 'pid'= ...

  5. eclipse安装插件的4种方式

    Eclipse插件的安装方法大体有以下三种:[9] 第一种:直接复制法 假设Eclipse的安装目录在C:\eclipse,解压下载的eclipse 插件或者安装eclipse 插件到指定目录AA(如 ...

  6. PL SQL Developer报错框乱码

    在系统变量里设置 变量名:NLS_LANG 变量值设为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

  7. 如何查看centos系统版本

    [root@LAMP1 config]# cat /proc/version Linux version 2.6.32-279.el6.x86_64 (mockbuild@c6b9.bsys.dev. ...

  8. Visual Studio 2010 使用 ankhsvn

    之前用的 Windows XP + Visual Studio 2010 + ankhSvn,其中ankhSvn安装完后直接可用, 后来系统换成Windows10后安装ankhSvn,Extentio ...

  9. checkbox批量操作

    hang=data.split("\1");//获取 查询返回的数据 处理数据 var str=""; for(var i =0;i<hang.lengt ...

  10. AppDelegate 里一个基本的跳转方法,用来在rootView崩溃的时候直接调试我自己的页面

    将 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)lau ...