题解:

裸的主席树,记录最小值

代码:

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=;
int a[N],cnt,Case,rt[N],b[N],now,n,m,x,y,k;
struct Tree
{
int ls,rs,num;
}T[N*];
int ef(int x)
{
int l=,r=cnt;
while (l<r)
{
int mid=(l+r)/;
if (b[mid]<x)l=mid+;
else r=mid;
}
return l;
}
int build(int l,int r)
{
now++;
if (l==r)return now;
int k=now,mid=(l+r)/;
if (l<=mid)T[k].ls=build(l,mid);
if (mid<r)T[k].rs=build(mid+,r);
return k;
}
int insert(int x,int l,int r,int s)
{
now++;
if (l==r)
{
T[now].num=T[x].num+;
return now;
}
int k=now,mid=(l+r)/;
if (s<=mid)
{
T[k].ls=insert(T[x].ls,l,mid,s);
T[k].rs=T[x].rs;
}
else
{
T[k].ls=T[x].ls;
T[k].rs=insert(T[x].rs,mid+,r,s);
}
T[k].num=T[T[k].ls].num+T[T[k].rs].num;
return k;
}
int find(int x,int y,int z,int l,int r)
{
if (l==r)return l;
if (T[T[x].ls].num-T[T[y].ls].num>=z)
return find(T[x].ls,T[y].ls,z,l,(l+r)/);
return find(T[x].rs,T[y].rs,z-
T[T[x].ls].num+T[T[y].ls].num,(l+r)/+,r);
}
int main()
{
scanf("%d",&Case);
while (Case--)
{
memset(T,,sizeof T);
now=;
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)scanf("%d",&a[i]);
for (int i=;i<=n;i++)b[i]=a[i];
sort(b+,b+n+);
cnt=;
for (int i=;i<=n;i++)
if (b[i]!=b[i-])b[++cnt]=b[i];
for (int i=;i<=n;i++)a[i]=ef(a[i]);
rt[]=build(,n);
for (int i=;i<=n;i++)rt[i]=insert(rt[i-],,n,a[i]);
while (m--)
{
scanf("%d%d%d",&x,&y,&k);
printf("%d\n",b[find(rt[y],rt[x-],k,,n)]);
}
}
}

hdu2665的更多相关文章

  1. 【POJ2104】【HDU2665】K-th Number 主席树

    [POJ2104][HDU2665]K-th Number Description You are working for Macrohard company in data structures d ...

  2. hdu2665(主席树模板题)

    hdu2665 题意 求区间第 k 小. 分析 参考 这类题目做法挺多的,例如 划分树. 这里使用主席树再写一发,不得不说主席树相比而言要好写的多,比起普通线段树,主席树就是复用了线段树共有的信息. ...

  3. 初学划分树,小见解之!POJ-2104/HDU-2665

    划分树 本来是学主席树的,可怜我等巨弱观群巨博客难解fotle主席的思想精髓.于是学了一下划分树,嗯,花了一下午时间理解build(其实自己模拟一遍就通了),我很难理解为什么划分树会看不懂而能学会主席 ...

  4. 洛谷3834 hdu2665主席树模板,动态查询区间第k小

    题目链接:https://www.luogu.com.cn/problem/P3834 对于区间查询第k小的问题,在区间数量达到5e5的时候是难以用朴素数据结构实现的,这时候主席树就应运而生了,主席树 ...

  5. hdu2665 && poj2104划分树

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 47066   Accepted: 15743 Ca ...

  6. POJ2104&&HDU2665(静态区间第K小)

    题目大意 给定一个有N个数字的序列,然后又m个查询,形式如下: l r k 要求你返回区间[l,r]第k小的数是哪个 题解 终于弄懂主席树是个啥东西了,O(∩_∩)O~~,这题正是主席树的裸题,主席树 ...

  7. 主席树初步 HDU2665的区间第k小

    首先看一下这个人的blog吧,讲的精炼http://blog.sina.com.cn/s/blog_4a0c4e5d0101c8fr.html 然后再推荐一下这个人的blog:http://www.c ...

  8. [POJ2104/HDU2665]Kth Number-主席树-可持久化线段树

    Problem Kth Number Solution 裸的主席树,模板题.但是求k大的时候需要非常注意,很多容易写错的地方.卡了好久.写到最后还给我来个卡空间. 具体做法参见主席树论文<可持久 ...

  9. HDU2665 求区间第K大 主席树

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2665 代码: //#include<bits/stdc++.h> #include< ...

  10. 主席树学习笔记-hdu-2665

    主席树就是对每个历史版本都建了一颗线段树,这样我们在统计一些问题的时候,对于一个区间[L,R]的询问,就可以利用前缀和的思想找到第L-1和第R颗历史版本的线段树来处理查找.由于这样空间需求就增大了,注 ...

随机推荐

  1. POJ 2823 Sliding Window(单调队列 || 线段树)题解

    题意:求每个长度为k的数组的最大值和最小值 思路: 1.用线段树创建维护最大值和最小值,遍历询问,简单复习了一下...有点手生 2.单调队列: 可以看一下详解 单调队列顾名思义就是一个单调递增或者递减 ...

  2. ASP.NET MVC之Bundle压缩JS和CSS

    介绍Bundle之前先引用<淘宝技术这十年>中一段话,对Web前端稍微有点常识的人都应该知道,浏览器下一步会加载页面中用到的CSS.JS(JavaScript).图片等样式.脚本和资源文件 ...

  3. HDU 5936 Difference(折半搜索(中途相遇法))

    http://acm.hdu.edu.cn/showproblem.php?pid=5936 题意: 定义了这样一种算法,现在给出x和k的值,问有多少个y是符合条件的. 思路: y最多只有10位,再多 ...

  4. MVC ---- EF的安装于卸载

    先卸载EF:Uninstall-Package EntityFramework -Force 在安装EF5.0:Install-Package EntityFramework –Version 5.0 ...

  5. blast 数据库说明

    Peptide Sequence Databases蛋白序列的数据库 nrAll non-redundant GenBank CDS translations + RefSeq Proteins + ...

  6. 如何理解并正确使用MySql索引

    原文链接:https://my.oschina.net/feinik/blog/1305784 1.概述 索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性 ...

  7. go 并发 demo

    两个进程执行两个goroutine // This sample program demonstrates how to create goroutines and // how the schedu ...

  8. jquery作业 教授答案

    http://www.cnblogs.com/qianjinyan/p/8961086.html 题目要求: 1. 通过jquery动态的创建一个表格,随机生成(id自增,name随机2-3个中文汉字 ...

  9. 微信小程序发起支付流程

    小程序调起支付API 需要参数 邮件中参数 API参数名 详细说明 APPID appid appid是微信小程序后台APP的唯一标识,在小程序后台申请小程序账号后,微信会自动分配对应的appid,用 ...

  10. vue饿了么学习笔记(1)vue-cli开启项目

    一.vue-cli介绍 vue-cli是vue的脚手架工具 ---->  帮助写好vue.js基础代码的工具: ① 搭建目录结构 ② 进行本地调试 ③ 进行代码部署 ④ 热加载 ⑤ 进行单元测试 ...