题意:

给出一个长度为n的序列和m次询问。

每次询问给出区间[l,r],求区间中出现次数大于(r-l+1)/2的数字。

n。m<=500000。1<=每一个数字<=n;

题解:

主席树的算是裸题吧,静态序列不用套树状数组,数据范围也省了离散化;

直接上主席树就能够了,复杂度就是O((n+m)logn)的样子;

空间略爆炸。可是假设取消Build()函数就能够过了。

orz icebound神犇,搞了一种奇妙的建树法:

void Insert(int l,int r,int &now,int val)
{
a[++cnt]=a[now];
now=cnt,a[now].sum++;
if(l==r) return ;
int mid=l+r>>1;
if(val<=mid) Insert(l,mid,a[now].l,val);
else Insert(mid+1,r,a[now].r,val);
}

这个姿势是不须要提前建空树的,省了2*n的空间;

比較巧妙的就是传地址之后复制结点。再把地址赋值,使新版本号的树独立出来;

所以仅仅须要四个參数就能够了,编程复杂度也非常低;

(我似乎讲的不太明确,yy一下代码就好了)

然后查询啥的搞搞推断也是logn级别,时间上不怎么卡就过了;

bzoj-2223同题。然而不仅数据范围小内存还大了一倍= =;

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 510000
using namespace std;
struct node
{
int l,r,sum;
}a[N*20];
int root[N],cnt;
void Build(int l,int r,int &no)
{
if(!no) no=++cnt;
if(l==r) return ;
int mid=l+r>>1;
Build(l,mid,a[no].l);
Build(mid+1,r,a[no].r);
}
void Insert(int l,int r,int &now,int val)
{
a[++cnt]=a[now];
now=cnt,a[now].sum++;
if(l==r) return ;
int mid=l+r>>1;
if(val<=mid) Insert(l,mid,a[now].l,val);
else Insert(mid+1,r,a[now].r,val);
}
int query(int l,int r,int nol,int nor,int val)
{
if(l==r) return l;
int mid=l+r>>1;
if(a[a[nor].l].sum-a[a[nol].l].sum>val)
return query(l,mid,a[nol].l,a[nor].l,val);
else if(a[a[nor].r].sum-a[a[nol].r].sum>val)
return query(mid+1,r,a[nol].r,a[nor].r,val);
else
return 0;
}
int main()
{
int n,m,i,j,k,x,l,r;
scanf("%d%d",&n,&m);
// Build(1,n,root[0]);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
root[i]=root[i-1];
Insert(1,n,root[i],x);
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&l,&r);
printf("%d\n",query(1,n,root[l-1],root[r],r-l+1>>1));
}
return 0;
}

bzoj-3524 Couriers的更多相关文章

  1. BZOJ 3524 Couriers | 主席树

    BZOJ 3524 Couriers 题意 求一个区间内出现超过区间长度的一半的数,如果没有则输出0. 题解 我可能太菜了吧--这道题愣是没想出来-- 维护权值主席树,记录每个数都出现过多少次: 查询 ...

  2. 洛谷 3567/BZOJ 3524 Couriers

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2895  Solved: 1189[Submit][S ...

  3. 主席树||可持久化线段树||BZOJ 3524: [Poi2014]Couriers||BZOJ 2223: [Coci 2009]PATULJCI||Luogu P3567 [POI2014]KUR-Couriers

    题目:[POI2014]KUR-Couriers 题解: 要求出现次数大于(R-L+1)/2的数,这样的数最多只有一个.我们对序列做主席树,每个节点记录出现的次数和(sum).(这里忽略版本差值问题) ...

  4. BZOJ 3524: [Poi2014]Couriers [主席树]

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1892  Solved: 683[Submit][St ...

  5. BZOJ 3524: [Poi2014]Couriers

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1905  Solved: 691[Submit][St ...

  6. BZOJ 3524 [Poi2014]Couriers(二分+蒙特卡罗)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3524 [题目大意] 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个 ...

  7. BZOJ 3524 [Poi2014]Couriers(可持久化线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3524 [题目大意] 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个 ...

  8. 【BZOJ 3524】【Poi2014】Couriers 可持久化线段树

    为什么这个主席树叫可持久化线段树,我不知道,具体得问达神.我无限T,然后DaD3zZ一针见血地指出了我的N*50爆内存导致无限编译超时O)ZO)ZO)Z真是太神啦.以图为鉴: 达神题解传送门:http ...

  9. 【bzoj 3524】[Poi2014]Couriers

    Description 给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. ...

  10. 【刷题】BZOJ 3524 [Poi2014]Couriers

    Description 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0 ...

随机推荐

  1. java selenium启动火狐浏览器报错:Cannot find firefox binary in PATH. Make sure firefox is installed. OS appears to be: VISTA Build info: version: '3.8.1', revision: '6e95a6684b', time: '2017-12-01T19:05:14.666Z

    Cannot find firefox binary in PATH. Make sure firefox is installed. OS appears to be: VISTA Build in ...

  2. HBase、Hive、MapReduce、Hadoop、Spark 开发环境搭建后的一些步骤(export导出jar包方式 或 Ant 方式)

    步骤一 若是,不会HBase开发环境搭建的博文们,见我下面的这篇博客. HBase 开发环境搭建(Eclipse\MyEclipse + Maven) 步骤一里的,需要补充的.如下: 在项目名,右键, ...

  3. Redis 链表结构 和 常用命令

    Redis 数据结构 --链表(linked-list) 命令 说明 备注 lpush key node1 [node2 ...] 把节点 node1 加入到 链表最左边 如果是 node1.node ...

  4. spring整合redis客户端及缓存接口设计

    一.写在前面 缓存作为系统性能优化的一大杀手锏,几乎在每个系统或多或少的用到缓存.有的使用本地内存作为缓存,有的使用本地硬盘作为缓存,有的使用缓存服务器.但是无论使用哪种缓存,接口中的方法都是差不多. ...

  5. jquery插件之倒计时-团购秒杀

      1.1 帮助文档关键字 倒计时 秒杀 timer 1.2.  使用场景 这样的倒计时在购物网站中会经常使用到,比如秒杀,限时抢购,确认收货倒计时. 这个功能并不难实现,就是利用js的定时执行,搜了 ...

  6. QtUI设计:设置控件透明

    QT设置按钮控件透明: 代码: //设置按钮 背景 前景 this->ui->ShowCvRGB->setStyleSheet(QString("color:rgba(25 ...

  7. 在安卓JNI/NDK中使用C++11

    在VS下编写的程序移植到Eclipse下,出现了问题: this file requires compiler and library support for iso C++ 2011 standar ...

  8. css3基础篇三

    CSS3 文本阴影 在 CSS3 中,text-shadow 可向文本应用阴影. 您能够规定水平阴影.垂直阴影.模糊距离,以及阴影的颜色: 实例 向标题添加阴影: h1 { text-shadow: ...

  9. Repeater + 分页控件 AspNetPager 研究

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs ...

  10. Django的Error汇总

    title: Django学习笔记 catalog: true subtitle: 11. Django_Error汇总 date: 2018-12-14 10:17:28 --- Django的Er ...