poj2014 不带修改区间第k大树
主席树 又称函数式线段树,又称可持久化线段树……缺点是内存有点儿大……
- type node1=record
- l,r,sum:longint;
- end;
- node2=record
- x,idx:longint;
- end;
- var q,i,j,k,tot,n,m:longint;
- a:array[..] of node2;
- rank,root:array[..] of longint;
- t:array[..] of node1;
- procedure qsort(h,l:longint);
- var i,j,m:longint;
- temp:node2;
- begin
- i:=h;j:=l;m:=a[(i+j)>>].x;
- repeat
- while a[i].x<m do inc(i);
- while a[j].x>m do dec(j);
- if i<=j then
- begin
- temp:=a[i];a[i]:=a[j];a[j]:=temp;
- inc(i);dec(j);
- end;
- until i>j;
- if i<l then qsort(i,l);
- if j>h then qsort(h,j);
- end;
- procedure insert(var x:longint;num,l,r:longint);
- var mid:longint;
- begin
- t[tot]:=t[x];
- x:=tot;
- inc(tot);
- inc(t[x].sum);
- if l=r then exit;
- mid:=(l+r)>>;
- if num<=mid then insert(t[x].l,num,l,mid)
- else insert(t[x].r,num,mid+,r);
- end;
- function query(i,j,k,l,r:longint):longint;
- var mid,tmp:longint;
- begin
- if l=r then exit(l);
- tmp:=t[t[j].l].sum-t[t[i].l].sum;
- mid:=(l+r)>>;
- if k<=tmp then exit(query(t[i].l,t[j].l,k,l,mid))
- else exit(query(t[i].r,t[j].r,k-tmp,mid+,r));
- end;
- procedure main;
- begin
- t[].l:=;t[].r:=;t[].sum:=;root[]:=;
- readln(n,m);
- for i:= to n do begin read(a[i].x);a[i].idx:=i;end;
- qsort(,n);
- tot:=;
- for i:= to n do rank[a[i].idx]:=i;
- for i:= to n do
- begin
- root[i]:=root[i-];
- insert(root[i],rank[i],,n);
- end;
- for q:= to m do
- begin
- readln(i,j,k);
- writeln(a[query(root[i-],root[j],k,,n)].x);
- end;
- end;
- begin
- main;
- end.
poj2014 不带修改区间第k大树的更多相关文章
- 少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小
少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小 有一道题(BZOJ 1901)是这样的:n个数,m个询问,询问有两种:修改某个数/询问区间第k小. 不带修改的区间第k小用主席树很好写 ...
- 【ZOJ2112】【整体二分+树状数组】带修改区间第k大
The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...
- Dynamic Rankings——带修改区间第k大
三种做法:1.整体二分: 二分mid 考虑小于mid的修改的影响 但是大于mid的修改可能会干掉小于mid的一些值 所以额外把一个修改变成一个值的删除和一个值的添加 这样就相互独立了! 整体二分,树状 ...
- luogu P2617 Dynamic Rankings && bzoj 1901 (带修改区间第k大)
链接:https://www.luogu.org/problemnew/show/P2617 思路: 如果直接在主席树上修改的话,每次修改都会对后面所有的树造成影响,一次修改的复杂度就会变成 : n* ...
- 【树状数组套主席树】带修改区间K大数
P2617 Dynamic Rankings 题目描述给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+ ...
- HDU 2665.Kth number-可持久化线段树(无修改区间第K小)模板 (POJ 2104.K-th Number 、洛谷 P3834 【模板】可持久化线段树 1(主席树)只是输入格式不一样,其他几乎都一样的)
Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 「BZOJ3065」带插入区间第K小值 替罪羊树×线段树
题目描述 从前有\(n\)只跳蚤排成一行做早操,每只跳蚤都有自己的一个弹跳力\(a_i\).跳蚤国王看着这些跳蚤国欣欣向荣的情景,感到非常高兴.这时跳蚤国王决定理性愉悦一下,查询区间\(k\)小值.他 ...
- 计蒜客 39272.Tree-树链剖分(点权)+带修改区间异或和 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest E.) 2019ICPC西安邀请赛现场赛重现赛
Tree Ming and Hong are playing a simple game called nim game. They have nn piles of stones numbered ...
- ZOJ 2112 Dynamic Rankings(树状数组套主席树 可修改区间第k小)题解
题意:求区间第k小,节点可修改 思路:如果直接用静态第k小去做,显然我更改一个节点后,后面的树都要改,这个复杂度太高.那么我们想到树状数组思路,树状数组是求前缀和,那么我们可以用树状数组套主席树,求出 ...
随机推荐
- SYN, FIN, ACK, PSH, RST, URG
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN表示建立连 ...
- DemoExample
<HTML> <HEAD> <TITLE>使用递归求解斐波那契数列</TITLE> </HEAD> <BODY> <?ph ...
- OO之策略模式
以下为策略模式详解: 引子: 使用策略就是要实现可扩展性,那么多态是不可少的.何谓可扩展性呢? 比如:我们用面向对象的思想来设计飞机,基类为飞机,飞机可以有很多种,客机,直升机,战斗机等,不同种类的飞 ...
- eclipse *.vm 文件,语法高亮
eclipse *.vm 文件,语法高亮按如下方式不起作用,原因不明.设置文件打开时使用的编辑器General>>Editors>>File Associations 下述方试 ...
- 然爸读书笔记(2014-10)----Bootsrap用户手册
本来其实这方面的知识,可以直接在网站上看,但是自己是web前端的小白.基本不懂.所以,还是买一本书来看,更好些.体现出我对前端的重视. Bootstrap是快速开发Web应用程序的前端工具包.它是一个 ...
- 浅谈JavaSccript函数与对象
函数 解剖函数 function One(leve1 , leve2){ //code return leve1+leve2 } 注释: 形参不需要加上类型: return语句为可选,没有return ...
- POJ1734 - Sightseeing trip
DescriptionThere is a travel agency in Adelton town on Zanzibar island. It has decided to offer its ...
- google protobuf 使用示例
定义.proto接口文件 package tutorial; message Person { required ; required int32 id = ; //unique ID number ...
- 【斜率DP】BZOJ 1010:玩具装箱
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 7537 Solved: 2888[Submit][St ...
- HDU 1757 A Simple Math Problem(矩阵快速幂)
题目链接 题意 :给你m和k, 让你求f(k)%m.如果k<10,f(k) = k,否则 f(k) = a0 * f(k-1) + a1 * f(k-2) + a2 * f(k-3) + …… ...