裸的主席树,没什么好说的

 type node=record
       l,r,s:longint;
     end;
var tree:array[..] of node;
    sa,rank,a,b,sum,head:array[..] of longint;
    t,k,x,y,i,n,m,p:longint; procedure swap(var a,b:longint);
  var c:longint;
  begin
    c:=a;
    a:=b;
    b:=c;
  end; procedure sort(l,r: longint);
  var i,j,x:longint;
  begin
    i:=l;
    j:=r;
    x:=a[(l+r) shr ];
    repeat
      while a[i]<x do inc(i);
      while x<a[j] do dec(j);
      if not(i>j) then
      begin
        swap(a[i],a[j]);
        swap(b[i],b[j]);
        inc(i);
        j:=j-;
      end;
    until i>j;
    if l<j then sort(l,j);
    if i<r then sort(i,r);
  end; procedure update(x:longint);
  begin
    tree[x].s:=tree[tree[x].l].s+tree[tree[x].r].s;
  end; function build(l,r:longint):longint;
  var m,q:longint;
  begin
    inc(t);
    q:=t;
    if l=r then exit(t)
    else begin
      m:=(l+r) shr ;
      tree[q].l:=build(l,m);
      tree[q].r:=build(m+,r);
    end;
    exit(q);
  end; function pre(w,l,r:longint):longint;
  var m,q:longint;
  begin
    inc(t);
    q:=t;
    if l=r then
      tree[q].s:=sum[l]
    else begin
      m:=(l+r) shr ;
      if rank[i]<=m then
      begin
        tree[q].l:=pre(tree[w].l,l,m);
        tree[q].r:=tree[w].r;
      end
      else begin
        tree[q].l:=tree[w].l;
        tree[q].r:=pre(tree[w].r,m+,r);
      end;
      update(q);
    end;
    exit(q);
  end; function ask(x,y,l,r:longint):longint;
  var m,a,b:longint;
  begin
    if l=r then
      exit(sa[l])
    else begin
      m:=(l+r) shr ;
      a:=tree[x].l;
      b:=tree[y].l;
  //    writeln(l,' ',m,' ',tree[b].s-tree[a].s);
      if tree[b].s-tree[a].s>=k then
        exit(ask(a,b,l,m))
      else begin
        k:=k-(tree[b].s-tree[a].s);
        exit(ask(tree[x].r,tree[y].r,m+,r));
      end;
    end;
  end; begin
  readln(n,m);
  for i:= to n do
  begin
    read(a[i]);
    b[i]:=i;
  end;
  sort(,n);
  p:=;
  rank[b[]]:=;
  sa[]:=a[];
  for i:= to n do
  begin
    if a[i]<>a[i-] then
    begin
      inc(p);
      sa[p]:=a[i];
    end;
    rank[b[i]]:=p;
  end;
  t:=;
  head[]:=build(,p);
  for i:= to n do
  begin
    inc(sum[rank[i]]);
    head[i]:=pre(head[i-],,p);
  end;
  for i:= to m do
  begin
    readln(x,y,k);
    writeln(ask(head[x-],head[y],,p));
  end;
end.

poj2104的更多相关文章

  1. 【POJ2104】K-th Number

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABToAAAJ2CAIAAADwi6oDAAAgAElEQVR4nOy9a5Pj1nnvi0/Q71Llj3

  2. 主席树模板(poj2104)

    主席树是可持久化线段树,可以记录线段树的历史版本. 代码中和线段树不同的是,l,r记录的是左右子树编号,因为普通的线段树版本中,左右子树自然就是o<<1和o<<1|1,但是主席 ...

  3. POJ2104 区间第k小

    题意就是区间第k大…… 题解: 前段时间用主席树搞掉了…… 如今看到划分树,是在想来写一遍,结果18号对着学长的代码调了一上午连样例都没过,好桑心…… 今天在做NOI2010超级钢琴,忽然发现用划分树 ...

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

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

  5. poj2104(划分树模板)

    poj2104 题意 给出一个序列,每次查询一个区间,要求告诉这个区间排序后的第k个数. 分析 划分树模板,O(mlogn). 建树.根据排序之后的数组,对于一个区间,找到中点的数,将整个区间分为左右 ...

  6. 划分树(poj2104)

    poj2104 题意:给出n个数,有m次查询,每次查询要你找出 l 到 r 中第 k 大的数: 思路:划分树模板题 上述图片展现了查询时如何往下递推的过程 其中ly表示 [sl,l) 中有多少个数进入 ...

  7. POJ2104 K-th Number [整体二分]

    题目传送门 K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 69053   Accepted: 24 ...

  8. 【莫队算法】【权值分块】poj2104 K-th Number / poj2761 Feed the dogs

    先用莫队算法保证在询问之间转移的复杂度,每次转移都需要进行O(sqrt(m))次插入和删除,权值分块的插入/删除是O(1)的. 然后询问的时候用权值分块查询区间k小值,每次是O(sqrt(n))的. ...

  9. poj2104(划分树模板)

    poj2104 题意 给出一个序列,每次查询一个区间,要求告诉这个区间排序后的第k个数. 分析 划分树模板,O(mlogn). 建树.根据排序之后的数组,对于一个区间,找到中点的数,将整个区间分为左右 ...

  10. POJ2104 K-th Number —— 区间第k小 整体二分

    题目链接:https://vjudge.net/problem/POJ-2104 K-th Number Time Limit: 20000MS   Memory Limit: 65536K Tota ...

随机推荐

  1. MVC中实现部分内容异步加载

    MVC中实现部分内容异步加载 action中定义一个得到结果集的方法 public ActionResult GetItemTree(string title, int itemid, int? pa ...

  2. sqlserver临时表排序问题

    在2005和2008中,如果将有序的记录插入临时表,则从临时表查看出来的记录是有序的(不使用Order by也是有序状态) 但从2012开始,即使插入的记录集是有序的,查看出来的结果变得无序了,需要依 ...

  3. tomcat启动正常,404. Eclipse没有正确部署工程项目

    http://blog.csdn.net/lynn_wgr/article/details/7751228 在eclipse中新建的Dynamic Web Project.写好代码后,选择Run on ...

  4. Visual C++ 打印编程技术-编程基础

    背景: windows产生前,操作系统(如DOS等)都不提供支持图像处理的打印机驱动程序,使得程序员为打印出图像,不得不针对使用的打印机 自己编写设备驱动程序,导致了大量的.不必要的重复开发. 随着w ...

  5. iOS-scrollview及其子类适配iOS7

    问题描述: 在iOS7之后如果在导航控制器中所属的字控制器中嵌入scrollview及其子类的视图,当scrollview的尺寸太小的话不会调用返回cell的方法.控制器的嵌套层级结构如下图所示,着重 ...

  6. Codevs 1689 建造高塔

    1689 建造高塔 时间限制: 1 s 空间限制: 128000 KB 题目等级 : **钻石 Diamond** 题目描述 Description n有n种石块,石块能无限供应.每种石块都是长方体, ...

  7. avconv转换视频

    提取指定stream time avconv -i i.mkv -map 0:0 -map 0:1 -map 0:5 -c:v copy -c:a:0 mp3 -c:s copy o.mkv 合并 a ...

  8. tomcat内存溢出问题

    内存泄露java.lang.OutOfMemoryError: PermGen space解决办法 今天访问web服务器,tomcat服务就瘫痪了,通过查看日志,发现java.lang.OutOfMe ...

  9. textarea 超过字数

    <textarea name="></textarea> <div id="statementRowChk"></div> ...

  10. about hadoop-eclipse-plugin used by IDE

    Apache Hadoop Development Tools (HDT) is still in development phase. So, no official distribution of ...