洛谷P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树_标记永久化
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],rson[maxn];
void newnode(int &o) { o=++cnt;}
void mark(int l,int r,int o,int delta)
{
sumv[o]+=delta*(r-l+1);
lazy[o]+=delta;
}
void update(int l,int r,int &o,int L,int R)
{
if(l>r||l>R||r<L)return;
if(!o) newnode(o);
if(l>=L&&r<=R) { mark(l,r,o,1); return ;}
int mid=(l+r)>>1;
update(l,mid,lson[o],L,R), update(mid+1,r,rson[o],L,R);
sumv[o]=sumv[lson[o]]+sumv[rson[o]]+(r-l+1)*lazy[o];
}
long long query(int l,int r,int o,int L,int R)
{
if(l>r||l>R||r<L||!o)return 0;
if(l>=L&&r<=R) return sumv[o];
int mid=(l+r)>>1;
return query(l,mid,lson[o],L,R)+query(mid+1,r,rson[o],L,R)+lazy[o]*(min(R,r)-max(l,L)+1);
}
}segin;
struct SegOUT
{
int root[maxn];
#define lson (o<<1)
#define rson (o<<1)|1
void insert(int l,int r,int o,int k,int L,int R)
{
if(l>r)return;
segin.update(1,n,root[o],L,R);
if(l==r)return;
int mid=(l+r)>>1;
if(k<=mid) insert(l,mid,lson,k,L,R);
else insert(mid+1,r,rson,k,L,R);
}
int query(int l,int r,int o,int L,int R,ll k)
{
if(l==r)return l;
ll tmp=segin.query(1,n,root[rson],L,R);
int mid=(l+r)>>1;
if(k<=tmp) return query(mid+1,r,rson,L,R,k);
else return query(l,mid,lson,L,R,k-tmp);
}
}segout;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
int a,b,c;ll d;
scanf("%d%d%d%lld",&a,&b,&c,&d);
if(a==1) segout.insert(1,2*n,1,(int)d+n,b,c);
else printf("%d\n",segout.query(1,2*n,1,b,c,d)-n);
}
return 0;
}
洛谷P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树_标记永久化的更多相关文章
- 洛谷 P3332 [ZJOI2013]K大数查询 解题报告
P3332 [ZJOI2013]K大数查询 题目描述 有\(N\)个位置,\(M\)个操作.操作有两种,每次操作如果是\(\tt{1\ a\ b\ c}\)的形式表示在第\(a\)个位置到第\(b\) ...
- [洛谷P3332][ZJOI2013]K大数查询
题目大意:有$n$个位置,$m$个操作.操作有两种: $1\;l\;r\;x:$在区间$[l,r]$每个位置加上一个数$x$ $2\;l\;r\;k:$询问$[l,r]$中第$k$大的数是多少. 题解 ...
- 洛谷 P3332 [ZJOI2013]K大数查询 (整体二分理解)
链接: P3332 题意: 维护 \(n(1\leq n\leq 5\times10^4)\) 个可重整数集,编号从 \(1\) 到 \(n\).有 \(m(1\leq m\leq5\times10^ ...
- 洛谷 P3332 [ZJOI2013]K大数查询 || bzoj3110
用树套树就很麻烦,用整体二分就成了裸题.... 错误: 1.尝试线段树套平衡树,码农,而且n*log^3(n)慢慢卡反正我觉得卡不过去 2.线段树pushdown写错...加法tag对于区间和的更新应 ...
- 【bzoj3110】[Zjoi2013]K大数查询 权值线段树套区间线段树
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...
- BZOJ3110[Zjoi2013]K大数查询——权值线段树套线段树
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是 ...
- P3332 [ZJOI2013]K大数查询(线段树套线段树+标记永久化)
P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树 把插入的值离散化一下开个线段树 蓝后每个节点开个线段树,维护一下每个数出现的区间和次数 为了防止MLE动态开点就好辣 重点是标记永久 ...
- [BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树)
[BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树) 题面 原题面有点歧义,不过从样例可以看出来真正的意思 有n个位置,每个位置可以看做一个集合. ...
- P3332 [ZJOI2013]K大数查询
传送门 注意操作 $1$ 是在区间的每个位置加入一个数,不是加上一个值 相当于每个位置维护的是一个集合 显然树套树 一开始想的是区间线段树套权值线段树 发现这样询问区间第 $K$ 大时就要先二分答案再 ...
随机推荐
- Opencv Mat矩阵中data、size、depth、elemSize、step等属性的理解
data: uchar类型的指针,指向Mat数据矩阵的首地址.可以理解为标示一个房屋的门牌号: dims: Mat矩阵的维度,若Mat是一个二维矩阵,则dims=2,三维则dims=3,大多数情况下处 ...
- 当一个元素被浮动后,它的display是否会被默认指定为block?
css 浮动后的元素不论是什么display的都默认是block就是设置inline也是block IE/6出现双边框的原因 出现双边距的条件是当浮动元素的浮动方向和margin的方向一致时才会出现. ...
- Install the high performance Nginx web server on Ubuntu
Look out Apache, there's a web server – Nginx (pronounced Engine X) – that means to dismantle you as ...
- 向Vue实例混入plusready
(function () { var onPlusReady = function (callback, context = this) { if (window.plus) { callback.c ...
- HOJ 1867 经理的烦恼 【 树状数组 】
题意:给出一个区间,求这个区间里面素数的个数 这道题wa了好多次---是因为add操作没有写对 每次更新的时候,应该先判断没有加上y是不是质数,加上了y是不是质数 如果从质数变成不是质数,那么add( ...
- Linux重新命名文件夹
linux 重命名文件和文件夹 linux下重命名文件或文件夹的命令mv既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c ...
- LCT复习
LCT,虚实链剖分.支持连边和断边操作.Tarjan制造. [HNOI2010]弹飞绵羊 当然这题分块可以做,常数小,但是LCT更无脑. 建立一个虚拟的弹飞节点\(n+1\),初始化时对于一个点假如再 ...
- 使用 vue + thinkjs 开发博客程序记录
一入冬懒癌发作,给自己找点事干.之前博客程序写过几次,php 的写过两次,nodejs 用 ThinkJS 写过,随着 ThinkJS 版本从1.x 升级到 2.x 之前的博客程序也做过升级.但是因为 ...
- 紫书 习题 8-17 UVa 11536 (滑动窗口)
这道题说连续子序列, 马上就想到滑动窗口. 注意窗口里面的元素中小于等于k的才是有效元素.记录窗口里面有效元素的个数, 满足了之后开始 缩短窗口, 如果左端点不是有效元素或者即使窗口中存在这个元素的个 ...
- 【CS round 34】Minimize Max Diff
[题目链接]:https://csacademy.com/contest/round-34/task/minimize-max-diff/ [题意] 给你n个数字; 数组按顺序不下降; 让你删掉k个数 ...