题目大意:对于一个序列,每次询问区间[l,r]的第k大树。

分析:

主席树模板题

  1. program kthtree;
  2. type
  3. point=record
  4. l,r,s:longint;
  5. end;
  6. var
  7. t:array[..*]of point;
  8. a,b,id,root:array[..]of longint;
  9. n,i,m,x,y,k,v,len:longint;
  10. procedure qsort(l,h:longint);
  11. var i,j,t,m:longint;
  12. begin i:=l; j:=h;
  13. m:=a[(i+j) div ];
  14. repeat
  15. while a[i]<m do inc(i);
  16. while m<a[j] do dec(j);
  17. if i<=j then
  18. begin t:=a[i]; a[i]:=a[j]; a[j]:=t; t:=id[i];id[i]:=id[j]; id[j]:=t;
  19. inc(i); dec(j); end; until i>j;
  20. if i<h then qsort(i,h); if j>l then qsort(l,j); end;
  21. procedure add(l,r,v:longint; var p:longint);
  22. var mid:longint;
  23. begin
  24. inc(len); t[len]:=t[p]; p:=len; inc(t[p].s);
  25. if l=r then exit;
  26. mid:=(l+r) div ;
  27. if v<=mid then add(l,mid,v,t[p].l) else add(mid+,r,v,t[p].r);
  28. end;
  29. function query(x,y,l,r,k:longint):longint;
  30. var mid,s:longint;
  31. begin
  32. if l=r then exit(l);
  33. mid:=(l+r) div ; s:=t[t[y].l].s-t[t[x].l].s;
  34. if k<=s then exit(query(t[x].l,t[y].l,l,mid,k))
  35. else exit(query(t[x].r,t[y].r,mid+,r,k-s));
  36. end;
  37. begin
  38. readln(n,m);
  39. for i:= to n* do t[i].s:=;
  40. for i:= to n do begin read(a[i]); id[i]:=i; end;
  41. qsort(,n);
  42. for i:= to n do b[id[i]]:=i;
  43. len:=;
  44. for i:= to n do
  45. begin
  46. root[i]:=root[i-];
  47. add(,n,b[i],root[i]);
  48. end;
  49. for i:= to m do
  50. begin
  51. readln(x,y,k);
  52. writeln(a[query(root[x-],root[y],,n,k)]);
  53. end;
  54. end.

POJ 2104:K-th Number(主席树静态区间k大)的更多相关文章

  1. 【POJ 2104】 K-th Number 主席树模板题

    达神主席树讲解传送门:http://blog.csdn.net/dad3zz/article/details/50638026 2016-02-23:真的是模板题诶,主席树模板水过.今天新校网不好,没 ...

  2. [poj 2104]主席树+静态区间第k大

    题目链接:http://poj.org/problem?id=2104 主席树入门题目,主席树其实就是可持久化权值线段树,rt[i]维护了前i个数中第i大(小)的数出现次数的信息,通过查询两棵树的差即 ...

  3. HDU 2665 Kth number(主席树静态区间第K大)题解

    题意:问你区间第k大是谁 思路:主席树就是可持久化线段树,他是由多个历史版本的权值线段树(不是普通线段树)组成的. 具体可以看q学姐的B站视频 代码: #include<cmath> #i ...

  4. POJ2104-- K-th Number(主席树静态区间第k大)

    [转载]一篇还算可以的文章,关于可持久化线段树http://finaltheory.info/?p=249 无修改的区间第K大 我们先考虑简化的问题:我们要询问整个区间内的第K大.这样我们对值域建线段 ...

  5. poj2104&&poj2761 (主席树&&划分树)主席树静态区间第k大模板

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

  6. HDU3727--Jewel (主席树 静态区间第k大)

    Jewel Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  7. 洛谷.3834.[模板]可持久化线段树(主席树 静态区间第k小)

    题目链接 //离散化后范围1~cnt不要错 #include<cstdio> #include<cctype> #include<algorithm> //#def ...

  8. Poj 2104 K-th Number(主席树&&整体二分)

    K-th Number Time Limit: 20000MS Memory Limit: 65536K Case Time Limit: 2000MS Description You are wor ...

  9. poj 2104 K-th Number 主席树+超级详细解释

    poj 2104 K-th Number 主席树+超级详细解释 传送门:K-th Number 题目大意:给出一段数列,让你求[L,R]区间内第几大的数字! 在这里先介绍一下主席树! 如果想了解什么是 ...

随机推荐

  1. POJ 3421 X-factor Chains(构造)

    这条链依次乘一个因子.因为n<2^20,sqrt(n)分解因子,相同的因子相对顺序取一个. 组合公式计算一下就好. #include<cstdio> #include<iost ...

  2. 理解MVC 框架

    前言:很多前端开发者面临着这样的问题,在项目开发中承担的工作越来越多,后端要做的越来越少,需要的技术棧越来越多,经常有人问你个技术是你完全不会的,对自己的职业生涯越来越怀疑.从前认为HTML+CSS+ ...

  3. DLM分布式锁的实现机制

    1.AST简介 DLM进程(LMON.LMD)之间的跨实例通信是使用高速互联上的IPC层实现的.为了传递锁资源的状态,DLM使用了异步陷阱(AST),它在操作系统处理程序例程中实现为中断.纯粹主义者可 ...

  4. 操作表单 -------JavaScrip

    本文摘要:http://www.liaoxuefeng.com/ HTML表单的输入控件主要有以下几种: 文本框,对应的<input type="text">,用于输入 ...

  5. C# 常用函数和方法集汇总

    1.DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=System.D ...

  6. java内存模型原理阅读总结

    Java内存模型可以理解为在特定操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象.不同架构的物理计算机可以有不一样的内存模型,java虚拟机也有自己的内存模型,java虚拟机规范中试图定义一种 ...

  7. C/C++程序基础 (九)排序算法简述

    排序算法 算法复杂度 算法简述 插入排序 N2 前方有序,依次将后方无序数据插入前方合适位置. 冒泡排序 N2 前方有序,从后方两两比较,将最小泡冒到前方. 选择排序 N2 前方有序,从后方选择最小的 ...

  8. git bash学习3 -简单杂乱知识点记录

    branch 新建分支 git init git add git commit 先新建一个仓库以及master 然后新建分支 git branch BranchName 然后切换分支 git chec ...

  9. GNU汇编 函数调用的例子

    .text .global  _start _start: mov r1,#2 cmp  r1,#1 bl func1    @bl能保存下一条指令的位置到lr寄存器里面,b不能 mov  r1, # ...

  10. js控制台输出图案

    控制台输出图案 console.log([ " _ooOoo_", " o8888888o", " 88\" . \"88&quo ...