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

 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. windows访问linux共享

    1. 安装samba yum install  samba 2. 配置samba配置文件,添加共享文件夹 vim   /etc/samba/smb.conf 3. 关闭selinux vi  /etc ...

  2. xCode如何导入自定义的snippets文件

    xCode代码块snippets导入 目标文件放置位置 ~/Library/Developer/Xcode/UserData/CodeSnippets 操作方法: 解压缩并复制到以下目录即可

  3. swift-07-使用for-in 遍历数组

    //for-in /* for 迭代变量 in集合变量 { 使用迭代变量便利所有数据 } */ //遍历数组 var arr = ["a" ,"b" ,&quo ...

  4. SQL Server系统视图 [不定期更新]

    1.sys.objects:在数据库中创建的每个用户定义的架构作用域内的对象(如表.视图.约束.默认值.日志.规则存储过程等,但不包括DDL触发器)在该表中均对应一行. 列名 说明 name 对象名. ...

  5. Linux网络

    netstat 查看网络状态 netstat: -r :显示路由表 -n: 以数字方式显示 -u: 显示UDP连接 -t :显示TCP连接 -l:显示监听状态的连接 -p: 显示监听指定套接字的进程的 ...

  6. couchDB入门

    无意翻到一本新书<CouchDB权威指南> 发现这就是传说中的NoSQL,看排第一的是mangodb,redis有些人说是,有些人说不是. CouchDB的开发很天才,直接可以通过java ...

  7. J2EE中的HttpSession

    J2EE中的HttpSession总结: ①什么是session? session是服务器端技术,利用这个技术,服务器在运行时可以为每一个浏览器创建一个共享的session对象,由于 session为 ...

  8. mysqli扩展库操作mysql数据库

    配置环境 配置php.ini文件让php支持mysqli扩展库 extension=php_mysqli.dll 建库建表 详见博客 “mysql扩展库操作mysql数据库” 查询数据库 <?p ...

  9. 互联网HTTP连接等出错代码大全

    100 - Continue  101 - Switching Protocols Success Codes  200 - OK  201 - Created  202 - Accepted  20 ...

  10. POJ 3258 River Hopscotch 二分枚举

    题目:http://poj.org/problem?id=3258 又A一道,睡觉去了.. #include <stdio.h> #include <algorithm> ]; ...