bzoj-3524 Couriers
题意:
给出一个长度为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的更多相关文章
- BZOJ 3524 Couriers | 主席树
BZOJ 3524 Couriers 题意 求一个区间内出现超过区间长度的一半的数,如果没有则输出0. 题解 我可能太菜了吧--这道题愣是没想出来-- 维护权值主席树,记录每个数都出现过多少次: 查询 ...
- 洛谷 3567/BZOJ 3524 Couriers
3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 2895 Solved: 1189[Submit][S ...
- 主席树||可持久化线段树||BZOJ 3524: [Poi2014]Couriers||BZOJ 2223: [Coci 2009]PATULJCI||Luogu P3567 [POI2014]KUR-Couriers
题目:[POI2014]KUR-Couriers 题解: 要求出现次数大于(R-L+1)/2的数,这样的数最多只有一个.我们对序列做主席树,每个节点记录出现的次数和(sum).(这里忽略版本差值问题) ...
- BZOJ 3524: [Poi2014]Couriers [主席树]
3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1892 Solved: 683[Submit][St ...
- BZOJ 3524: [Poi2014]Couriers
3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1905 Solved: 691[Submit][St ...
- BZOJ 3524 [Poi2014]Couriers(二分+蒙特卡罗)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3524 [题目大意] 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个 ...
- BZOJ 3524 [Poi2014]Couriers(可持久化线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3524 [题目大意] 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个 ...
- 【BZOJ 3524】【Poi2014】Couriers 可持久化线段树
为什么这个主席树叫可持久化线段树,我不知道,具体得问达神.我无限T,然后DaD3zZ一针见血地指出了我的N*50爆内存导致无限编译超时O)ZO)ZO)Z真是太神啦.以图为鉴: 达神题解传送门:http ...
- 【bzoj 3524】[Poi2014]Couriers
Description 给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. ...
- 【刷题】BZOJ 3524 [Poi2014]Couriers
Description 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0 ...
随机推荐
- 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 ...
- HBase、Hive、MapReduce、Hadoop、Spark 开发环境搭建后的一些步骤(export导出jar包方式 或 Ant 方式)
步骤一 若是,不会HBase开发环境搭建的博文们,见我下面的这篇博客. HBase 开发环境搭建(Eclipse\MyEclipse + Maven) 步骤一里的,需要补充的.如下: 在项目名,右键, ...
- Redis 链表结构 和 常用命令
Redis 数据结构 --链表(linked-list) 命令 说明 备注 lpush key node1 [node2 ...] 把节点 node1 加入到 链表最左边 如果是 node1.node ...
- spring整合redis客户端及缓存接口设计
一.写在前面 缓存作为系统性能优化的一大杀手锏,几乎在每个系统或多或少的用到缓存.有的使用本地内存作为缓存,有的使用本地硬盘作为缓存,有的使用缓存服务器.但是无论使用哪种缓存,接口中的方法都是差不多. ...
- jquery插件之倒计时-团购秒杀
1.1 帮助文档关键字 倒计时 秒杀 timer 1.2. 使用场景 这样的倒计时在购物网站中会经常使用到,比如秒杀,限时抢购,确认收货倒计时. 这个功能并不难实现,就是利用js的定时执行,搜了 ...
- QtUI设计:设置控件透明
QT设置按钮控件透明: 代码: //设置按钮 背景 前景 this->ui->ShowCvRGB->setStyleSheet(QString("color:rgba(25 ...
- 在安卓JNI/NDK中使用C++11
在VS下编写的程序移植到Eclipse下,出现了问题: this file requires compiler and library support for iso C++ 2011 standar ...
- css3基础篇三
CSS3 文本阴影 在 CSS3 中,text-shadow 可向文本应用阴影. 您能够规定水平阴影.垂直阴影.模糊距离,以及阴影的颜色: 实例 向标题添加阴影: h1 { text-shadow: ...
- Repeater + 分页控件 AspNetPager 研究
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs ...
- Django的Error汇总
title: Django学习笔记 catalog: true subtitle: 11. Django_Error汇总 date: 2018-12-14 10:17:28 --- Django的Er ...