洛谷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$ 大时就要先二分答案再 ...
随机推荐
- application和javaBean练习
编写一个jsp程序,实现将用户信息保存在application对象的用户注册 package com.sp.test; public class User { private String usena ...
- NYOJ 16 矩形嵌套【DP】
解题思路:呃,是看的紫书上面的做法,一个矩形和另一个矩形之间的关系就只有两种,(因为它自己是不能嵌套自己的),可嵌套,不可嵌套,是一个二元关系,如果可嵌套的话,则记为1,如果不可嵌套的话则记为0,就可 ...
- 在 android studio 中更新安卓应用版本号
随着应用程序不断修改,版本号也应当变化.要更新安卓应用的版本号,只需要在 build.gradle(module:app) 中修改 versionCode 和 versionName 即可,也可以只改 ...
- ajax错误信息
XMLHttpRequest.status状态码 1xx-信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应. 100-继续. 101-切换协议. 2xx- ...
- C#调用带结构体指针的C Dll的方法
在C#中调用C(C++)类的DLL的时候,有时候C的接口函数包含很多参数,而且有的时候这些参数有可能是个结构体,而且有可能是结构体指针,那么在C#到底该如何安全的调用这样的DLL接口函数呢?本文将详细 ...
- MySQL锁定状态查看命令
1 show processlist; SHOW PROCESSLIST显示哪些线程正在运行.您也可以使用mysqladmin processlist语句得到此信息.如果您有SUPER权限,您可以看到 ...
- C++primer读书笔记11-多态
多态也是C++中的一个重要的方面.多态和动态类型,虚函数本质上是指同样的事情. 1 虚函数 类中的成员函数原型前面加上virtual 表面这个函数是个虚函数.虚函数的目的是为了在继承它的派生类中又一次 ...
- vim visual操作备忘
visual模式下: jkl选中行 "+y 复制选中行
- 安卓安装提示:Android SDK requires Android Developer Toolkit version 21.1.0 or above. (错误解决方法)
安卓安装提示:Android SDK requires Android Developer Toolkit version 21.1.0 or above. (错误解决方法) 主要是因为版本号不正确 ...
- thinkphp5项目--个人博客(八)
thinkphp5项目--个人博客(八) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...