题目传送门

可怜的狗狗

题目背景

小卡由于公务需要出差,将新家中的狗狗们托付给朋友嘉嘉,但是嘉嘉是一个很懒的人,他才没那么多时间帮小卡喂狗狗。

题目描述

小卡家有N只狗,由于品种、年龄不同,每一只狗都有一个不同的漂亮值。漂亮值与漂亮的程度成反比(漂亮值越低越漂亮),吃饭时,狗狗们会按顺序站成一排等着主人给食物。

可是嘉嘉真的很懒,他才不肯喂这么多狗呢,这多浪费时间啊,于是他每次就只给第i只到第j只狗中第k漂亮的狗狗喂食(好狠心的人啊)。而且为了保证某一只狗狗不会被喂太多次,他喂的每个区间(i,j)不互相包含。

输入输出格式

输入格式:

第一行输入两个数n,m,你可以假设n<300001 并且 m<50001;m表示他喂了m次。

第二行n个整数,表示第i只狗的漂亮值为ai。

接下来m行,每行3个整数i,j,k表示这次喂食喂第i到第j只狗中第k漂亮的狗的漂亮值。

输出格式:

M行,每行一个整数,表示每一次喂的那只狗漂亮值为多少。

输入输出样例

输入样例#1:

7 2
1 5 2 6 3 7 4
1 5 3
2 7 1
输出样例#1:

3
2

  分析:

  $Noip$前复习一波$FHQ\_Treap$。

  很模板了,求$k$小值,把询问区间排个序再依次处理就行了。

  Code:

  

//It is made by HolseLee on 7th Nov 2018
//Luogu.org P1533
#include<bits/stdc++.h>
using namespace std; const int N=3e5+;
int n,m,tot,root,a[N],ch[N][],val[N],siz[N],p[N],ans[N];
struct Ques {
int l,r,k,id;
inline bool operator < (const Ques x) const {
return l==x.l ? r<x.r : l<x.l;
}
}q[N]; inline int read()
{
char ch=getchar(); int x=; bool flag=false;
while( ch<'' || ch>'' ) {
if( ch=='-' ) flag=true; ch=getchar();
}
while( ch>='' && ch<='' ) {
x=x*+ch-''; ch=getchar();
}
return flag ? -x : x;
} inline void pushup(int rt)
{
siz[rt]=siz[ch[rt][]]+siz[ch[rt][]]+;
} void split(int rt,int k,int &x,int &y)
{
if( !rt ) x=y=;
else {
if( val[rt]<=k ) x=rt, split(ch[rt][],k,ch[rt][],y);
else y=rt, split(ch[rt][],k,x,ch[rt][]);
pushup(rt);
}
} int merge(int x,int y)
{
if( !x || !y ) return x+y;
if( p[x]<p[y] ) {
ch[x][]=merge(ch[x][],y); pushup(x);
return x;
} else {
ch[y][]=merge(x,ch[y][]); pushup(y);
return y;
}
} inline int neo(int v)
{
siz[++tot]=; val[tot]=v;
p[tot]=rand();
return tot;
} inline void insert(int v)
{
int x,y;
split(root,v,x,y);
root=merge(merge(x,neo(v)),y);
} inline void delet(int v)
{
int x,y,z;
split(root,v,x,y);
split(x,v-,x,z);
z=merge(ch[z][],ch[z][]);
root=merge(merge(x,z),y);
} int Rank(int u,int k)
{
if( siz[ch[u][]]==k- ) return val[u];
else if( siz[ch[u][]]>=k ) return Rank(ch[u][],k);
return Rank(ch[u][],k-siz[ch[u][]]-);
} int main()
{
srand(time());
n=read(); m=read();
for(int i=; i<=n; ++i) a[i]=read();
for(int i=; i<=m; ++i) {
q[i].l=read(), q[i].r=read(), q[i].k=read();
q[i].id=i;
}
sort(q+,q+m+);
int L=, R=;
for(int i=; i<=m; ++i) {
while( R<q[i].r ) insert(a[++R]);
while( L<q[i].l ) delet(a[L++]);
ans[q[i].id]=Rank(root,q[i].k);
}
for(int i=; i<=m; ++i) printf("%d\n",ans[i]);
return ;
}

洛谷P1533 可怜的狗狗 [平衡树,FHQ_Treap]的更多相关文章

  1. AC日记——可怜的狗狗 洛谷 P1533

    可怜的狗狗 思路: 主席树第k大: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 300001 #defin ...

  2. BZOJ3196 & 洛谷3380:二逼平衡树——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3196 https://www.luogu.org/problemnew/show/P3380 (题 ...

  3. Luogu P1533 可怜的狗狗

    题目链接:https://www.luogu.org/problemnew/show/P1533 没人写$fhq\ treap$做法,那我就补一篇qwq 看到这题第一时间想主席树,然后发现我还没学主席 ...

  4. P1533 可怜的狗狗

    http://www.luogu.org/problem/show?pid=1533 题目背景 小卡由于公务需要出差,将新家中的狗狗们托付给朋友嘉嘉,但是嘉嘉是一个很懒的人,他才没那么多时间帮小卡喂狗 ...

  5. BZOJ3224 洛谷3369 Tyvj 1728 普通平衡树 splay

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3224 题意概括 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. ...

  6. 【题解】Luogu P1533 可怜的狗狗

    原题传送门 莫队介绍,Splay介绍 离线的题目,莫队是不错的解决方法 先把询问排一下序 剩下就套一个莫队的板子 每来一只狗就把漂亮值插入平衡树 每去掉一只狗就把漂亮值从平衡树中删掉 每次查询查平衡树 ...

  7. 洛谷.3835.[模板]可持久化平衡树(fhq treap)

    题目链接 对每次Merge(),Split()时产生的节点都复制一份(其实和主席树一样).时间空间复杂度都为O(qlogq).(应该更大些 因为rand()?内存真的爆炸..) 对于无修改的操作实际上 ...

  8. 【洛谷P3369】 (模板)普通平衡树

    https://www.luogu.org/problemnew/show/P3369 Splay模板 #include<iostream> #include<cstdio> ...

  9. luogu P1533 可怜的狗狗 |莫队+二分

    题目背景 小卡由于公务需要出差,将新家中的狗狗们托付给朋友嘉嘉,但是嘉嘉是一个很懒的人,他才没那么多时间帮小卡喂狗狗. 题目描述 小卡家有N只狗,由于品种.年龄不同,每一只狗都有一个不同的漂亮值.漂亮 ...

随机推荐

  1. 【模板】MST(Prim)

    代码如下 #include <bits/stdc++.h> using namespace std; const int maxv=2e5+10; const int maxe=5e5+1 ...

  2. eos源码剖析之controller

    controller::block_status,区块状态枚举类,包括: irreversible = 0,该区块已经被当前节点应用,并且被认为是不可逆的.validated = 1,这是由一个有效生 ...

  3. java回顾(项目前期的基本准备)

    一.     基础回顾 1   集合 1.1 集合的类型与各自的特性 ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList:  数组实现, 查 ...

  4. Flask script 内的Shell 类 使用

    1.集成Python shell 每次自动shell会话都要导入数据库实例和模型,很烦人.为了避免一直重复导入,我们可以做些配置让Flask-Script的Shell命令自动导入特定的对象.若想把对象 ...

  5. python---django中模板布局

    对于页面大部分一样,我们可以使用模板布局来简化 可以查看tornado中的模板引擎,基本一致 python---tornado模板引擎 对于相同代码部分,我们可以提取出来,放在布局文件layout.p ...

  6. html template--(来自网易)

    html template   概述 包含完整头部信息和主体结构的HTML基础模板. 代码展示 <!DOCTYPE html> <html> <head> < ...

  7. Myeclipse/STS 首次在本地部署配置一个Spring MVC 项目 (十二)

    1. 在本地新创建一个文件夹 ,做为项目工作空间; 2. 用 Myeclipse 或 STS 进入该文件夹,该文件夹就成为项目的工作空间: 3. 就要进 窗口-首选项,配置: 环境默认编码: 1> ...

  8. 开放通用Api,总有你喜欢的

    接口文档 目录 通用 更新记录 接口列表 一.福彩-双色球接口 指定期号中奖号码 最新中奖号码信息 获取双色球中奖信息列表 二.节假日及万年历 指定日期的节假日及万年历信息 指定多个日期的节假日及万年 ...

  9. ifconfig,netstat command not found

    当CentOS7进行最小化安装时,有很多工具包是没有的. [root@vultr ~]# ifconfig -bash: ifconfig: command not found [root@vultr ...

  10. 内置函数bytes()

    a=b'\x00\x9c@c' print a[3]#99,c的ascii码是99 print a[1]#156 并且byte是无法修改的 c[1]=155 Traceback (most recen ...