区间第K值带修改 分块

整体二分——修改区间第k大 Description   给定一个长度为N的已知序列A[i](1<=i<=N),要求维护这个序列,能够支持以下两种操作:   1、查询A[i],A[i+1],A[i+2],…,A[j](1<=i<=j<=N)中,升序排列后排名第k的数。   2、修改A[i]的为j。   所谓排名第k,指一些数按照升序排列后,第k位的数。例如序列{6,1,9,6,6},排名第3的... 阅读详情

区间第K值带修改

Q:给定一个序列 1、查询一个L到R的区间内的第K大(小)值。2、修改一个值。

这道神题困扰了我很久,直到学了各种各样的算法才会这道题。

先比较一下流行的算法的效率吧

对于一个长度为N的序列

---------------------------------------------------

暴力:对于一段查询区间每次进行快排。

时间复杂度:

单次查询:O(NlogN)

修改:O(1)

空间复杂度:O(N)

----------------------------------------------------

线段树套平衡树:

单次查询:O(log^3 N)

修改:O(log^2 N)

空间复杂度:O(N^2logn)<

20200903 专题:分块 总览: 做了一道毒瘤题 区间k小 并且树套树常数过大,过不去 (毒瘤出题人毒瘤卡常) 于是就学习了新科技:分块 实质是分块分块,先给序列分块,再在每个块中给分块分块用链表实现好方便 具体题目具体分析 T1 P4278 插入区间K小 思路: bzoj一个点平均15s,luogu一个点1s…… 先对序列分块,方便取出 [l,r][l,r][l,r] 再对分块,方便查询 kkk 小 要 O(1)O(1)O(1) 查询 [l,r][l,r][l,r] 中在 [vall,valr][val 阅读详情

相关推荐

zoj 2112 Dynamic Rankings 修改区间第k大的几种解法

给出n个数,有两种操作,一种是修改某个数的,另一种查询指定区间第k大。 比较快的做法是树套树,而分块算法复杂度比较高写起来方便。分块算法可以很简单的处理单独修改某个的情况。 将n个数分成num块,每块大小siz=n/num。每一块内部排序进行排序,查询[l,r]第k大时,先二分答案,对于完全包含在区间的内块直接二分搜索,而对于区间两端只有部分包含的则直接遍历查找。复杂度是logn*(2*s

写东西的地方 3969

pku 2761(求区间内第k小的数)

pku 2761(求区间内第k小的数) 我是用线段树去做的,好像也可用树状数组做的,稍微有一点注释在里面的^_^

动态区间第k小数(分块分块

问题描述 给定一个由N个数组成的序列{A1,A2,…,AN} 每次可以将Ak的改为t,或者提问序列中{Al,…,Ar}中第k小的数的。 输入格式 第一行两个正整数N,M,表示有N个数,M次操作 接下来每行描述一个操作: ·如果第一个字符时C,那么接下来两个正整数k,t,表示把Ak的改成t; ·如果第一个字符时Q,那么接下来三个正整数l,r,k,表示提问序列中{Al,…,Ar}中第k小的数的...

baijiuhao的博客 814

线段树套平衡树 对于区间第K大询问 及修改操作

pascal 版 对于线段树的每一个节点 都是一颗平衡树 若不涉及修改 只需将平衡树改为线性表 然后二分

POJ2104 区间第k大(修改

Description   给定一个长度为N的已知序列A[i](1&lt;=i&lt;=N),要求维护这个序列,能够支持以下两种操作:   1、查询A[i],A[i+1],A[i+2],…,A[j](1&lt;=i&lt;=j&lt;=N)中,升序排列后排名第k的数。   2、修改A[i]的为j。   所谓排名第k,指一些数按照升序排列后,第k位的数。例如序列{6,1,9,6,6},排名第3的...

DancingZ的博客 782

主席树 求区间第k大数(可修改

给出一个数列,以及多次操作,操作可以是修改某一个数,也可以是询问某一段区间

Hacb的专栏 3658

牛客-求最大(单点修改,区间查询)

题目直通车 给出一个序列,你的任务是求每次操作之后序列中 (a[j]-a[i])/(j-i)【1<=i<j<=n】的最大。 操作次数有Q次,每次操作需要将位子p处的数字变成y. 输入描述: 本题包含多组输入,每组输入第一行一个数字n,表示序列的长度。 然后接下来一行输入n个数,表示原先序列的样子。 再接下来一行一个数字Q,表示需要进行的操作的次数。 最后Q行每行两个元素p,y,...

jahup的博客 1037

分块 ——区间修改 (luogu P 3372)

联想分块求解的思路,对于块两端边缘暴力处理,对于连续的完整的块直接调用块中内容。 那么很好想到区间修改思路,设sum[i]为第i个块的总和,inc[i]为第i个块所有数全部都要加的,相当于线段树里的标记。每次把a数组[l,r]区间增加val,就先将左右两端多出来的,暴力a[i]+=val,并把i所在块的sum也要加上val,然后中间连续完整的块inc[i]+=val。 询问也就很简单了,先...

c3po 575

bzoj3065: 插入区间K小

分块

OZY的博客 618

bzoj 3065 插入区间K小

分块

我要吃熊猫 893

[BZOJ]3065: 插入区间K小 块状链表

分块

TYB的博客 449

ZOJ 2112 Dynamic Rankings(修改区间第K大,分块+二分搜索+二分答案)

Dynamic RankingsTime Limit:10 Seconds Memory Limit:32768 KB The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with the query like to simply find th...

weixin_30273501的博客 153

LG P4278 插入区间K小 Solution

LG P4278 Solution

pystraf的博客 910

修改区间第k大

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1112 提高代码能力。。。 方法一: 线段树套平衡树,时间:O(m*lgn*lgn*lgn),空间:O(n*lgn)。 #include #include #include #include #include using namespace std; c

霁月难逢 彩云易散 2737

分块入门8:区间修改为同一查询区间元素=c的

题目链接:https://loj.ac/problem/6284 题目大意: #include<bits/stdc++.h> using namespace std; typedef long long LL; //由块号寻找第一个块元素的下标 #define LL(x) ((x-1)*Len+1) const int mod=10007; LL read() { LL x...

H_ang的博客 410

[BZOJ3065]插入区间K小

插入区间K小 题解 很明显的块状链表做法。分块万岁 我们先对域进行分块,只要知道每个块中每个数的出现次数,很容易就可以在的时间内得到第k小。 然后我们需要维护一个序列,进行序列分块。 询问时,我们需求出一段区间内每个数,每个块的出现次数。这可以通过前缀和快速的求出,之前统计下就可以了。对于每个域块与数字的出现次数。查询时两端暴力处理,中间前缀和直接差分。这样预处理,查询。 修改...

StaroForgin的博客 293

洛谷P4278 插入区间k小分块+块状链表

洛谷P4278 插入区间k小分块+块状链表 题意: 给一个序列,三种操作,强制在线 1.区间k小 2.单点修改 3.单点插入 思路:一道非常恶心的题… 首先树套树能做1、2,但是单点插入不好维护,而且树套树太难写了。考虑分块 k小 首先kkk小怎么做?和线段树一样,分块根号n叉树,记录每个数出现次数和每个块的次数,在三层的根号n叉树上查找O(n)O(\sqrt n)O(n​)即可解决 区间k小 那区间kkk小呢?再考虑序列分块,我们希望整块的信息O(1)O(1)O(1)获取,散块O(n

weixin_45539557的博客 497

HDU 5412 区间第K 修改 树状数组套平衡树

题意:给定一个序列,两种操作:1、求修改第i个数为Vi;2、求区间[L,R]第K大的。 2015多校练习赛的一道题。因为是经典题所以很多人都直接把模板敲上去了,然而通过率却惨不忍睹。我也是直接套以前写的程序的SB之一。然而分块时间复杂度太高并不能通过本题(分块做法见:http://blog.csdn.net/nkwbtb/article/details/21639647)于是愉快的TLE了。考

None 1157
下一篇: 【LCA】最近公共祖先问题Lowest Common Ancestors
NKWBTB
博客等级 码龄16年 4粉丝 23原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值