hdu2665
题解:
裸的主席树,记录最小值
代码:
- #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的更多相关文章
- 【POJ2104】【HDU2665】K-th Number 主席树
[POJ2104][HDU2665]K-th Number Description You are working for Macrohard company in data structures d ...
- hdu2665(主席树模板题)
hdu2665 题意 求区间第 k 小. 分析 参考 这类题目做法挺多的,例如 划分树. 这里使用主席树再写一发,不得不说主席树相比而言要好写的多,比起普通线段树,主席树就是复用了线段树共有的信息. ...
- 初学划分树,小见解之!POJ-2104/HDU-2665
划分树 本来是学主席树的,可怜我等巨弱观群巨博客难解fotle主席的思想精髓.于是学了一下划分树,嗯,花了一下午时间理解build(其实自己模拟一遍就通了),我很难理解为什么划分树会看不懂而能学会主席 ...
- 洛谷3834 hdu2665主席树模板,动态查询区间第k小
题目链接:https://www.luogu.com.cn/problem/P3834 对于区间查询第k小的问题,在区间数量达到5e5的时候是难以用朴素数据结构实现的,这时候主席树就应运而生了,主席树 ...
- hdu2665 && poj2104划分树
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 47066 Accepted: 15743 Ca ...
- POJ2104&&HDU2665(静态区间第K小)
题目大意 给定一个有N个数字的序列,然后又m个查询,形式如下: l r k 要求你返回区间[l,r]第k小的数是哪个 题解 终于弄懂主席树是个啥东西了,O(∩_∩)O~~,这题正是主席树的裸题,主席树 ...
- 主席树初步 HDU2665的区间第k小
首先看一下这个人的blog吧,讲的精炼http://blog.sina.com.cn/s/blog_4a0c4e5d0101c8fr.html 然后再推荐一下这个人的blog:http://www.c ...
- [POJ2104/HDU2665]Kth Number-主席树-可持久化线段树
Problem Kth Number Solution 裸的主席树,模板题.但是求k大的时候需要非常注意,很多容易写错的地方.卡了好久.写到最后还给我来个卡空间. 具体做法参见主席树论文<可持久 ...
- HDU2665 求区间第K大 主席树
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2665 代码: //#include<bits/stdc++.h> #include< ...
- 主席树学习笔记-hdu-2665
主席树就是对每个历史版本都建了一颗线段树,这样我们在统计一些问题的时候,对于一个区间[L,R]的询问,就可以利用前缀和的思想找到第L-1和第R颗历史版本的线段树来处理查找.由于这样空间需求就增大了,注 ...
随机推荐
- C# 获取枚举的描述属性
在使用枚举类型时,我们需要取名称和值,甚至有时候还需要取枚举类型的描述.通过反射,我们能获取到枚举类型的描述属性. 首先我们需要给枚举类型添加描述属性(属性都没有是不可能取到的),[Descripti ...
- Linux下GCC生成和使用静态库和动态库【转】
本文转载自:http://www.cppblog.com/deane/articles/165216.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本 ...
- 矩阵二分快速幂优化dp动态规划
矩阵快速幂代码: int n; // 所有矩阵都是 n * n 的矩阵 struct matrix { int a[100][100]; }; matrix matrix_mul(matrix A, ...
- # WinForm关闭窗体确认
private void Lba_IE_Form_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show(&q ...
- shell 脚本中所有循环语法
写出 shell 脚本中所有循环语法 for 循环 : for i in $(ls);do echo item:$i done while 循环 : #!/bin/bash COUNTER=0 whi ...
- HDU 4489 The King's Ups and Downs
HDU 4489 The King's Ups and Downs 思路: 状态:dp[i]表示i个数的方案数. 转移方程:dp[n]=∑dp[j-1]/2*dp[n-j]/2*C(n-1,j-1). ...
- Codeforces 559B - Equivalent Strings
559B - Equivalent Strings 思路:字符串处理,分治 不要用substr(),会超时 AC代码: #include<bits/stdc++.h> #include&l ...
- Vue项目骨架屏注入实践
相比于早些年前后端代码紧密耦合.后端工程师还得写前端代码的时代,如今已发展到前后端分离,这种开发方式大大提升了前后端项目的可维护性与开发效率,让前后端工程师关注于自己的主业.然而在带来便利的同时,也带 ...
- openshift harp.js heroku react-router 4
https://segmentfault.com/a/1190000000355181 http://harpjs.com/ https://www.jianshu.com/p/7bc34e56fa3 ...
- Android 使用SQLite
SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLit ...