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

题目描述
小卡家有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

读题:求静态维护区间第k大,显然可以用主席树o r 莫队算法轻松过去,
但作为一名蒟蒻(其实是懒得动脑筋)表示不会
怎么办,我可以用序列之王splay+一些莫队算法的思想(可能也许叫毛毛虫算法)
离线操作:将每个区间L,R,区间排序(一定记得按原顺序编号),以左端点为第一关键字,右端点为第二关键字,之后再简单的处理一下就行了(建议自己画图与程序一起理解)
具体操作
设置两个之间指针一起向右移动,用splay维护区间删除头元素,插入尾元素,
画个图:

上代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
inline int read() {int f=1,x=0;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return f*x;
}
int n,m,g,h,o,p,root,cnt,tot;
const int maxn=3e5+5;
int s[maxn][2],w[maxn],v[maxn],c[maxn],f[maxn];
inline void up(int x) {w[x]=w[s[x][0]]+w[s[x][1]]+c[x];
}
inline void rotate(int x) {int y=f[x],z=f[y],k=s[y][1]==x;s[z][s[z][1]==y]=x;f[x]=z;s[y][k]=s[x][k^1];f[s[x][k^1]]=y;s[x][k^1]=y;f[y]=x;up(y);up(x);
}
inline void splay(int x,int g) {while (f[x]!=g) {int y=f[x],z=f[y];if (z!=g)(s[z][0]==y)^(s[y][0]==x)?rotate(x):rotate(y);rotate(x);}if (g==0) root=x;
}
inline void find(int x) {int u=root;if (!u) return;while (s[u][x>v[u]]&&x!=v[u])u=s[u][x>v[u]];splay(u,0);
}
inline int insert(int x) {int u=root,ff=0;while (u&&v[u]!=x) ff=u,u=s[u][x>v[u]];if (u) c[u]++;else {u=++tot;if (ff) s[ff][x>v[ff]]=u;s[u][0]=s[u][1]=0;f[tot]=ff;v[tot]=x;c[tot]=1;w[tot]=1;}splay(u,0);
}
inline int next(int x,int ff) {find(x);int u=root;if (v[u]>x&&ff) return u;if (v[u]<x&&!ff) return u;u=s[u][ff];while (s[u][ff^1]) u=s[u][ff^1];return u;
}
inline int search(int k) {int u=root;while (1) {int q=s[u][0];if (w[q]+c[u]<k)k-=w[q]+c[u],u=s[u][1];else if (w[q]>=k) u=q;else return v[u];}
}
inline void del(int x) {int l=next(x,0);int nxt=next(x,1);splay(l,0);splay(nxt,l);int d=s[nxt][0];if (c[d]>1) c[d]--,splay(d,0);else s[nxt][0]=0;
}
struct node {int x,y,z;
} a[50005];
bool cmp(node x,node y) {return (x.x<y.x||(x.x==y.x&&x.y<y.y));
}
int d[300005],t1,w1;
int main() {freopen("1.in","r",stdin);n=read();m=read();for (int i=1; i<=n; i++) d[i]=read();for (int i=1; i<=m; i++) a[i].x=read(),a[i].y=read(),a[i].z=read();sort(a+1,a+m+1,cmp);tot=0;insert(-2147483647);insert(+2147483647);t1=0;w1=0;for (int i=1; i<=m; i++)printf("%d %d %d",a[i].x,a[i].y,a[i].z);for (int i=a[1].x; i<=a[1].y; i++)insert(d[i]);printf("%d\n",search(a[1].z+1));t1=a[1].x;w1=a[1].y;for (int i=2; i<=m; i++) {while (t1<a[i].x) del(d[t1]),t1++;while (w1<a[i].y) insert(d[w1]),w1++;printf("%d\n",search(a[i].z+1));}return 0;
}

P1533 可怜的狗狗 平衡树相关推荐

  1. P1533 可怜的狗狗

    漂亮小姐姐点击就送:https://www.luogu.org/problemnew/show/P1533 题目背景 小卡由于公务需要出差,将新家中的狗狗们托付给朋友嘉嘉,但是嘉嘉是一个很懒的人,他才 ...

  2. Luogu P1533 可怜的狗狗

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

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

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

  4. 上古时期(大雾)的数据结构pdf

    分块+点分治+Treap byWYCby\ WYCby WYC Part1 分块 概念 就是将nnn个数分成若干个块,然后要处理的时候整块一起的加上局部的直接暴力. 如果将块的大小分配好一般每次都是O ...

  5. Conclusion

    /* 高中最后一个暑假 挺有意义的 考了一暑假的试 最后总结一下吧 一天一天来吧7.30 这一天的题有点变态啊 不过难题有难题的做法 T1斗地主 考试的时候打了0分 0分..... 原因好像是读入的格 ...

  6. 【caffe-Windows】caffe+VS2013+Windows+GPU配置+cifar使用

    前言 国际惯例,先来波地址: CUDA WIN7:链接:http://pan.baidu.com/s/1nvyA3Qp 密码:h0f3   官方网址:https://developer.nvidia. ...

  7. Google 要在游戏世界里训练 AI 了!

    现在,Google将通过强化学习和虚拟世界来"发展"更智能的算法了! 智能设计与进化不仅仅是人们在世界观上的一个分歧.这也是人工智能社区的一个分歧.直到几年前,AI的主要用途还只是 ...

  8. 好心人救了一只瘦成骷髅的狗,没想到这个善举却让自闭症的儿子不药而愈…

    2012年9月15日,美国佐治亚州德卡尔布县的动物营救组织在路边看到一个狗狗"尸体","尸体"仿佛是狗皮包裹着一副狗骨架. 救援人员发现狗狗还有一丝气息,于是马 ...

  9. 第5堂音频课:发音词串自学方法示范

    1. 发音怎么练习 我讲解的第5-6节发音课,就像一个有用教练,教你的划水姿势,你学了以后,在床上趴着练练蹬腿,然后,要立刻跳下水去游泳,也就是说,你要去听英语: 请你听一段可可宝贝APP的绘本故事, ...

最新文章

  1. 从零开始一起学习SLAM | 为啥需要李群与李代数?
  2. GAN生成的结果多样性不足怎么办?那就再添一个鉴别器!
  3. HTML文本应当存储为UTF-8无BOM格式!
  4. “Zhuang.Data”轻型数据库访问框架(一)开篇介绍
  5. 祝各位网友儿童节快乐!
  6. 【计算机网络复习 数据链路层】3.5.3 CSMA协议
  7. 人际关系的55个绝招
  8. k2p一直亮红灯搜不到信号_周迅感情亮红灯?真离了!?亮红灯英文是red light ?red 对了,但不用 light!...
  9. 2017.9.27 可持久化并查集 失败总结
  10. spring:注解配置AOP
  11. Fiddler 抓包工具
  12. Hadoop原理及架构
  13. 赛尔号和赛尔机器人_赛尔号9:赛尔机器人与艾里逊交战,赛尔机器人战败?...
  14. Java学习日记1——基础认知
  15. 三星oneui主屏幕费电_三星最新力作,第三方桌面无处遁形,OneUI越来越自由
  16. python将某个非格式化显示的json文件处理得到格式化显示
  17. Unable to make field private final byte[] java.lang.String.value accessible: module java.base does n
  18. c语言野指针应用,C语言中野指针的深入解析
  19. XTDrone无人机仿真平台
  20. RK平台之AI模型转换环境搭建

热门文章

  1. jdk32位安装包下载_神灯商户数据采集软件下载_神灯商户数据采集软件 v5.0.0 官方版...
  2. SharePoint Modern Page 的脚本引入部件
  3. 2471. [EZOI 2016]源氏的数学课
  4. sqlserver2014补丁速度慢_SQL Server数据库查询速度慢的原因和解决方法
  5. 各种技术中间件对比(2020.11.9第二次更新)
  6. 推荐引擎分为哪几类,个性化推荐引擎的介绍
  7. zanox付款账户银行支付的填写(注册图解)
  8. 某宝的优惠券系统小项目
  9. 计算机网络 RIP,OSPF,BGP,MPLS协议
  10. Linux输出重定向 >> 文件 2>1