思路:

按权值建一棵主席树

(但是这好像不是正解 空间复杂度是不对的…….)

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 555555
int n,m,cnt,root[N],a[N],xx,yy;
struct Tree{int l,r,num;}tree[N*20];
void push_up(int pos){tree[pos].num=tree[tree[pos].l].num+tree[tree[pos].r].num;}
int build(int l,int r){
int pos=++cnt;
if(l==r){return pos;}
int mid=(l+r)>>1;
tree[pos].l=build(l,mid),tree[pos].r=build(mid+1,r);
return pos;
}
int insert(int o,int l,int r,int num){
int pos=++cnt;tree[pos]=tree[o];
if(l==r){tree[pos].num++;return pos;}
int mid=(l+r)>>1;
if(num<=mid)tree[pos].l=insert(tree[o].l,l,mid,num);
else tree[pos].r=insert(tree[o].r,mid+1,r,num);
push_up(pos);
return pos;
}
int query(int o,int v,int l,int r,int wei){
if(tree[o].num-tree[v].num<=wei)return 0;
if(l==r)return l;
int mid=(l+r)>>1;
if(tree[tree[o].l].num-tree[tree[v].l].num>wei)
return query(tree[o].l,tree[v].l,l,mid,wei);
else return query(tree[o].r,tree[v].r,mid+1,r,wei);
}
int main(){
scanf("%d%d",&n,&m);
root[0]=build(1,n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]),root[i]=insert(root[i-1],1,n,a[i]);
for(int i=1;i<=m;i++){
scanf("%d%d",&xx,&yy);
printf("%d\n",query(root[yy],root[xx-1],1,n,(yy-xx+1)/2));
}
}

BZOJ 3524主席树裸题 (雾)的更多相关文章

  1. POJ 2104 求序列里第K大 主席树裸题

    给定一个n的序列,有m个询问 每次询问求l-r 里面第k大的数字是什么 只有询问,没有修改 可以用归并树和划分树(我都没学过..囧) 我是专门冲着弄主席树来的 对主席树的建树方式有点了解了,不过这题为 ...

  2. 主席树----POJ 2104(主席树裸题)(转)

    首先来介绍一下我们需求:给你n个数,多次问你某个区间内的第k小是哪个数 主席树: 主席树的全名应该是 函数式版本的线段树.加上附带的一堆 technology.. ..总之由于原名字太长了,而且 “主 ...

  3. BZOJ 3524 - 主席树

    传送门 题目分析 标准主席树,按照位置插入每个数,对于询问l, r, 在l-1,r两树上按照线段树搜索次数大于(r - l + 1) / 2的数. code #include<bits/stdc ...

  4. poj2104 主席树裸题

    空间大小:n*lgn 复杂度:建树n*lgn  查询lgn #include <cstdio> #include <iostream> #include <algorit ...

  5. 15:Challenge 11(主席树裸题)

    总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求 ...

  6. POJ 3468 线段树裸题

    这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...

  7. Codeforces 633C Spy Syndrome 2 | Trie树裸题

    Codeforces 633C Spy Syndrome 2 | Trie树裸题 一个由许多空格隔开的单词组成的字符串,进行了以下操作:把所有字符变成小写,把每个单词颠倒过来,然后去掉单词间的空格.已 ...

  8. BZOJ 3932: [CQOI2015]任务查询系统 (主席树板题)

    就是裸的主席树,差分之后排序插入主席树就行了. 注意主席树查询的时候叶子节点要特判,因为本身是有size的 还有要开longlong CODE #include <cctype> #inc ...

  9. 【BZOJ 1901】【Zju 2112】 Dynamic Rankings 动态K值 树状数组套主席树模板题

    达神题解传送门:http://blog.csdn.net/dad3zz/article/details/50638360 说一下我对这个模板的理解: 看到这个方法很容易不知所措,因为动态K值需要套树状 ...

随机推荐

  1. java语言MySQL批处理

    本质来讲就是使用Statement和PreStatement的addBatch()方法 代码 import java.sql.*; public class GetConnection{ public ...

  2. 【转载】黑客内核:编写属于你的第一个Linux内核模块

    黑客内核:编写属于你的第一个Linux内核模块

  3. 110_leetcode_Best Time to Buy and sell Stock II

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  4. Xamarin部署时遇到错误: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]

    1 把adb命令加入到环境变量. ADB 的位置:C:\Users\USER\AppData\Local\Android\android-sdk\platform-tools 2. 卸载包,执行(是a ...

  5. poj3071之概率DP

    Football Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2667   Accepted: 1361 Descript ...

  6. Linux就该这么学 20181004(第五章用户权限)

    参考链接https://www.linuxprobe.com/ Linux是一个多用户.多任务的操作系统,具有很好的稳定性与安全性,在幕后保障Linux系统安全的则是一系列复杂的配置工作.本章将 详细 ...

  7. vue keep-alive保存路由状态1 (接下篇)

    本文很长,但是很详细,请耐心看完就一目了然了有下篇 keep-alive 是 Vue 内置的一个组件,使被包含的组件保留状态,或避免重新渲染. 1. 基础用法,缓存所有路由: <keep-ali ...

  8. 乌班图 之 Ubuntu 16.04 LTS连接无线上网炒鸡慢问题!!!

    用VMware装了Ubuntu 16.04 LTS后连接无线上网,发现出奇的慢. 果断感觉有问题,立马找度娘,果然有问题!!! 网上查找亲测有效的方法为: 在终端运行:sudo gedit /etc/ ...

  9. Oracle12C查询自建用户(非系统自带)

      select username from dba_users where INHERITED='NO';

  10. Thread Control Block

    Thread Control Block The following is the declaration of the Thread Control Block. struct tcb { u32_ ...