用树套树就很麻烦,用整体二分就成了裸题.... 错误: 1.尝试线段树套平衡树,码农,而且n*log^3(n)慢慢卡反正我觉得卡不过去 2.线段树pushdown写错...加法tag对于区间和的更新应该要乘上区间长度的 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; typedef long long LL; struct Q { LL type,a,b,c,num;…
P3332 [ZJOI2013]K大数查询 题目描述 有\(N\)个位置,\(M\)个操作.操作有两种,每次操作如果是\(\tt{1\ a\ b\ c}\)的形式表示在第\(a\)个位置到第\(b\)个位置,每个位置加入一个数\(c\)如果是\(\tt{2\ a\ b\ c}\)形式,表示询问从第\(a\)个位置到第\(b\)个位置,第\(C\)大的数是多少. 输入输出格式 输入格式: 第一行\(N\),\(M\)接下来\(M\)行,每行形如\(\tt{1\ a\ b\ c}\)或\(\tt{2…
链接: P3332 题意: 维护 \(n(1\leq n\leq 5\times10^4)\) 个可重整数集,编号从 \(1\) 到 \(n\).有 \(m(1\leq m\leq5\times10^4)\) 个操作: 1 l r c 表示将 \(c\) 插入到编号在 \([l,r]\) 的集合中. 2 l r c 表示查询编号在 \([l,r]\) 的集合的并集中的第 \(c\) 大数. 分析: 这道题除了用树套树等方法外,还可以用整体二分. 参考<浅谈数据结构题的几个非经典解法>的介绍:…
题目大意:有$n$个位置,$m$个操作.操作有两种: $1\;l\;r\;x:$在区间$[l,r]$每个位置加上一个数$x$ $2\;l\;r\;k:$询问$[l,r]$中第$k$大的数是多少. 题解:树套树,权值线段树套位置线段树,要标记永久化,不然会$TLE$ 卡点:没有标记永久化,$TLE$,然后处理$tag$部分写错 C++ Code: #include <cstdio> #include <algorithm> #include <cctype> namesp…
Code: #include <cstdio> #include <algorithm> #include <string> #include <cstring> using namespace std; #define maxn 50005*256 #define ll long long int n,m,tree; struct SEGIN { int cnt; long long sumv[maxn],lazy[maxn]; int lson[maxn…
P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树 把插入的值离散化一下开个线段树 蓝后每个节点开个线段树,维护一下每个数出现的区间和次数 为了防止MLE动态开点就好辣 重点是标记永久化,就是不下传标记,而是每次询问时算上路径上的标记 标记永久化后快了1倍 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define rint registe…
传送门 注意操作 $1$ 是在区间的每个位置加入一个数,不是加上一个值 相当于每个位置维护的是一个集合 显然树套树 一开始想的是区间线段树套权值线段树 发现这样询问区间第 $K$ 大时就要先二分答案再用 $O(log^2_n)$ 时间查询 那么单次询问的复杂度就有 $O(log^3_n)$ ,显然不行 考虑权值线段树套区间线段树 单次插入复杂度还是 $O(log^2_n)$,询问时只要在权值线段树上二分就行 那么单次操作复杂度就是 $O(log^2_n)$ 据说此题很卡常,为了防止我的大常数导致…
终于入门整体二分了,勉勉强强算是搞懂了一个题目吧. 整体二分很多时候可以比较好的离线处理区间\(K\)大值的相关问题.考虑算法流程: 操作队列\(arr\),其中有询问和修改两类操作. 每次在答案的可行值域上二分一个\(mid\),把询问的答案\(>mid\)的分在\(R\)部,\(<=mid\)的分在\(L\)部.把修改的值\(>mid\)的分在\(R\)部,\(<=mid\)的分在\(L\)部. 何谓整体二分?就是直接一起二分所有的询问操作的答案,然后暴力扫描当前操作区间,将其…
[BZOJ3110][LG3332][ZJOI2013]K大数查询 题面 洛谷 BZOJ 题解 和普通的整体分治差不多 用线段树维护一下每个查询区间内大于每次二分的值\(mid\)的值即可 然后再按套路做就行了 代码 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm&…
[BZOJ3110][Zjoi2013]K大数查询 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c,如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少. Input 第一行N,M接下来M行,每行形如1 a b c或2 a b c Output 输出每个询问的结果 Sample Input 2 5 1 1 2 1 1 1 2 2 2 1 1 2 2 1 1 1 2 1 2 3…