原来主席树就是可持久化线段树啊,刚知道,,,

作为一道裸题,还是必A的,然而一开始偷懒不写离散化跪了N多遍,后来在缪大的帮助下发现了这个问题,遂A之

——又是这种破问题,实在不想说自己了

把n个数看成n次修改,对于每一次都建线段树,于是就能得到N棵线段树

然后时间空间全都爆炸,我们得到了完美的程序

但是每次因为只修一个叶子,所以只有一条根到叶的节点被修改,只要把这一部分备份一份就好了

最后返回新的根,用于保存

最后求的时候只要把两端点(左端点-1)的线段树上的点权值一减就搞定了

代码难看的要死,离散化是后来加的,看得出加的很生硬

#include <cstdio>
#include <algorithm>
#define INF 2000000000
#define max n
#define min 1
using namespace std;
struct node
{
int val,ls,rs;
} t[];
int cnt=;
struct num
{
int val,ran,rea;
} a[];
bool operator<(num a,num b)
{
return a.val<b.val;
}
bool com(num a,num b)
{
return a.ran<b.ran;
}
int root[],dui[];
int add(int now,int l,int r,int x)
{
int ne=++cnt,mid=(l+r)/;
t[ne]=t[now];
t[ne].val++;
if(l<r)
if(x<=mid)
t[ne].ls=add(t[now].ls,l,mid,x);
else
t[ne].rs=add(t[now].rs,mid+,r,x);
return ne;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i].val);
a[i].ran=i;
}
sort(a+,a+n+);
for(int i=;i<=n;i++)
{
a[i].rea=i;
dui[a[i].rea]=a[i].val;
}
sort(a+,a+n+,com);
for(int i=;i<=n;i++)
root[i]=add(root[i-],min,max,a[i].rea);
for(int i=;i<=m;i++)
{
int x,y,z,l,r,mid;
scanf("%d%d%d",&x,&y,&z);
for(x=root[x-],y=root[y],l=min,r=max,mid=(l+r)/;l<r;mid=(l+r)/)
if(t[t[y].ls].val-t[t[x].ls].val<z)
{
z-=t[t[y].ls].val-t[t[x].ls].val;
x=t[x].rs;y=t[y].rs;
l=mid+;
}
else
{
x=t[x].ls;y=t[y].ls;
r=mid;
}
printf("%d\n",dui[l]);
}
return ;
}

poj2104 K-th Number区间第k小值 主席树的更多相关文章

  1. Dynamic Rankings || 动态/静态区间第k小(主席树)

    JYF大佬说,一星期要写很多篇博客才会有人看 但是我做题没有那么快啊QwQ Part1 写在前面 区间第K小问题一直是主席树经典题=w=今天的重点是动态区间第K小问题.静态问题要求查询一个区间内的第k ...

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

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

  3. HDU 2665.Kth number 区间第K小

    Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. POJ 2014.K-th Number 区间第k小 (归并树)

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

  5. bzoj 3065: 带插入区间K小值 替罪羊树 && AC300

    3065: 带插入区间K小值 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1062  Solved: 253[Submit][Status] Des ...

  6. [luogu3834]静态区间第k小【主席树】

    传送门:https://www.luogu.org/problemnew/show/P3834 题目描述 如题,给定N个整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 分析 很多人都说是用 ...

  7. 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树

    题目传送门 题解 orz vfk的题解 3065: 带插入区间K小值 系列题解 一 二 三 四 惨 一开始用了一种空间常数很大的方法,每次重构的时候merge两颗线段树,然后无限RE(其实是MLE). ...

  8. 「BZOJ3065」带插入区间第K小值 替罪羊树×线段树

    题目描述 从前有\(n\)只跳蚤排成一行做早操,每只跳蚤都有自己的一个弹跳力\(a_i\).跳蚤国王看着这些跳蚤国欣欣向荣的情景,感到非常高兴.这时跳蚤国王决定理性愉悦一下,查询区间\(k\)小值.他 ...

  9. 【bzoj3065】带插入区间K小值 替罪羊树套权值线段树

    题目描述 从前有n只跳蚤排成一行做早操,每只跳蚤都有自己的一个弹跳力a[i].跳蚤国王看着这些跳蚤国欣欣向荣的情景,感到非常高兴.这时跳蚤国王决定理性愉悦一下,查询区间k小值.他每次向它的随从伏特提出 ...

随机推荐

  1. 面试题目——《CC150》数学与概率

    面试题7.2:三角形的三个顶点上各有一只蚂蚁.如果蚂蚁开始沿着三角形的边爬行,两只或三只蚂蚁撞到一起的概率有多大?假定每只蚂蚁会随机选一个方向,每个方向被选到的几率相等,而且三只蚂蚁的爬行速度相同. ...

  2. UVALive 4329 Ping pong

                                      Ping pong Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Fo ...

  3. Linux date命令详解

    1.显示时间 date命令可以按照指定格式显示日期,只键入date则以默认格式显示当前时间.如下: 如果需要以指定的格式显示日期,可以使用“+”开头的字符串指定其格式,详细格式如下: %n : 下一行 ...

  4. CentOS下SNMP的安装与使用

    CentOS下SNMP的安装与使用   导读 简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol).数据库模型(datab ...

  5. dp 走格子问题

    问题: 一个5x8的格子,想从左下角走到右上角,求最短路径,共有多少种走法. 思路: 因为是求最短路径,所以,只会往右往上走. 我们可以把棋盘的左下角看做二维坐标的原点(0,0),把棋盘的右上角看做二 ...

  6. getRealPath("/")弃用

    用request.getSession().getServletContext().getRealPath("/");替换getRealPath("/"):

  7. 安装KB3132372补丁后,WIN10中IE内核加载flash崩溃

    今天(2015年12月30日)突然很多人反馈在WIN10上IE内核的PC端应用崩溃.经过一番查找,最终定位到问题.WIN10今天发布了新的补丁KB3132372,64位系统更新该补丁后,打开IE内核的 ...

  8. mingw32 捕获异常的4种方法

    ------------------------------------------------------------------------------- 1. 利用 windows 的API S ...

  9. sql语句中----删除表数据drop、truncate和delete的用法

    sql语句中----删除表数据drop.truncate和delete的用法 --drop drop table  tb   --tb表示数据表的名字,下同 删除内容和定义,释放空间.简单来说就是把整 ...

  10. wow经典台词

    永恒岛,磐皂在玄牛上场时喊:你能否独立山巅,任由风霜侵袭,直至沧海变为桑田,高山沉入海底?风刀霜剑,四面受敌.不动如山,亘古不移. 巫妖王:当一切结束,你会跪求我的宽恕...而我,会拒绝你! 伊利丹: ...