Luogu P2310 【loidc,看看海】
各位大佬都用的排序和杨颙大定理,蒟蒻的我怎么也不会做(瑟瑟发抖),那么,就来一发主席树吧。
我们知道线段树可以维护区间,平衡树可以维护值域
那么,我们可以用线段树套平衡树来解决这个区间值域的问题
线段树套平衡树(令人窒息的操作)
好在权值线段树也可以维护值域,
我们只要建n棵线段树维护前缀和,然后作差就好
考虑空间限制,我们需要让这些线段树共用一些节点,再搞一搞离散化,其实这题的数据范围不用
一颗主席树华丽登场
时间复杂度O(nlogn),空间复杂度O(nlogn)
上代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;
struct tree{
int v,ls,rs;
}a[*maxn];
int n,m,rt[maxn],cnt,mp[maxn],v[maxn],out[maxn];
void insert(int pre,int cur,int p,int l,int r) //插入
{
if(l==r)
{
a[cur].v=a[pre].v+;
return;
}
int m=(l+r)>>;
if(p<=m)
{
a[cur].ls=++cnt; //新建节点
a[cur].rs=a[pre].rs; //共用节点
insert(a[pre].ls,a[cur].ls,p,l,m);
}
else
{
a[cur].rs=++cnt;
a[cur].ls=a[pre].ls;
insert(a[pre].rs,a[cur].rs,p,m+,r);
}
a[cur].v=a[a[cur].ls].v+a[a[cur].rs].v; //push up
}
int kth(int x,int y,int k,int l,int r) //查询k小值
{
if(l==r)
return l;
int m=(l+r)>>;
int num=a[a[y].ls].v-a[a[x].ls].v; //前缀和
if(num>=k) //第k小在左子树
return kth(a[x].ls,a[y].ls,k,l,m);
else //在右子树
return kth(a[x].rs,a[y].rs,k-num,m+,r);
}
int main()
{
cin>>n;
for(int i=;i<=n;i++)
{
scanf("%d",&v[i]);
mp[i]=v[i];
}
sort(mp+,mp+n+); //特色离散化
cin>>m;
for(int i=;i<=n;i++)
{
v[i]=lower_bound(mp+,mp+n+,v[i])-mp;
out[v[i]]=i;
rt[i]=++cnt;
insert(rt[i-],rt[i],v[i],,n);
}
for(int i=;i<=m;i++)
{
int x,y,k;
scanf("%d%d%d",&x,&y,&k);
printf("%d\n",out[kth(rt[x-],rt[y],k,,n)]);
}
return ;
}
Luogu P2310 【loidc,看看海】的更多相关文章
- P2310 loidc,看看海
P2310 loidc,看看海 题目背景 loidc喜欢大海.在他放假的时候他经常一个人跑到海边独自玩耍. 在浪花的冲击下,他可以忘记打代码的烦躁,真是惬意极了. 虽然今天是周六,但今天可是11.8号 ...
- Luogu P2309 loidc,卖卖萌
题目链接:Click here 题目大意:给你一个长度为n的数串,问这个数串的sum为正数的子串个数 Solution: 我们先处理以下前缀和,记为\(s_i\) 则问题可以转化为求有多少对\(i,j ...
- Luogu P2297 刷图 DP
题目背景 loidc,LOI中的传说级哲♂学家,曾经创造一天内入坑maxlongint个弃坑0x7fffffff个的神奇纪录.目前,loidc最喜欢的游戏就是地下城与勇♂士. 题目描述 Loidc是一 ...
- 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)
我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...
- 海鑫智圣:物联网漫谈之MQTT协议
什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...
- c#程序如何从海康ipserver查询获取DVR设备ip地址
海康威视提供的ipserver可以记录DVR设备的IP地址,并提供一个7071的端口给客户端查询用,我们在c#程序中可以用海康SDK包中的NET_DVR_GetDVRIPByResolveSvr函数来 ...
- HDU--航海舰队
海舰队 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- 从Facebook跑来阿里的赵海平大叔,你要干啥?
赵海平在今年三月份来到阿里,听毕玄(他现任主管)说去年五六月份就跟赵海平聊上了.有人问:为啥 BAT 三大巨头,你看中了阿里巴巴?在今天现场达一千多人的分享中赵海平给出了回复:“因为百度和腾讯没找我呗 ...
- html5实现银联海购商品分类列表
银联海购官网请点击 http://haigou.unionpay.com/ 1.实现效果预览展示如下: 2.源码如下 <!DOCTYPE html> <html> <he ...
随机推荐
- 2017 3 8 练习赛 t3 路径规划
题目大意是让你在一棵树上找到一条路径使得(路径边权和*路径最小值) 最大. 这道题有两种方法. 1.点分治,考虑过重心的每条路径是否可能成为答案,枚举从根出发的每一条路径中的最小值等于总路径的最小值, ...
- python安装pip、numpy、scipy、statsmodels、pandas、matplotlib等
1.安装python 2.安装numpy(开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多. 很多库都是以此库为依 ...
- Chapter 2(算法)
附件列表 算法.jpg
- Nginx Upstream Keepalive 分析 保持长连接
Nginx Upstream长连接由upstream模式下的keepalive指令控制,并指定可用于长连接的连接数,配置样例如下: upstream http_backend { server ...
- bzoj千题计划116:bzoj1025: [SCOI2009]游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=1025 题目转化: 将n分为任意段,设每段的长度分别为x1,x2,…… 求lcm(xi)的个数 有一个 ...
- [Luogu 3952] NOIP2017 时间复杂度
[Luogu 3952] NOIP2017 时间复杂度 一年的时间说长不长,说短,也不短. 一年之内无数次觉得难得可怕的题目,原来也就模拟这么回事儿. #include <cstdio> ...
- .NET 定时器类及使用方法
Timer类实现定时任务 //2秒后开启该线程,然后每隔4s调用一次 System.Threading.Timer timer = new System.Threading.Timer((n) =&g ...
- 微服务深入浅出(11)-- SpringBoot整合Docker
添加Dockerfile 在目录src/main/resources目录下店家Dockerfile文件: From java MAINTAINER "Eric"<eric.l ...
- SQL SERVER 视图优化经历
系统中要求对HIS数据进行效益统计,因为HIS数据是需要第三方提供接口导入的,不清楚数据量大小,所以视图以业务为主未对其做性能优化(当时编写试图时就是几条简单的测试数据) 如今在项目接口实施完成后查看 ...
- 线段树区间更新(set暴力)
题目链接:https://cn.vjudge.net/contest/66989#problem/I 具体思路:使用栈存储村庄被损坏的顺序,然后set存的是被损坏的村庄,然后每一次查询,直接找到要查询 ...