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大数查询 权值线段树套区间线段树_标记永久化的更多相关文章

  1. 洛谷 P3332 [ZJOI2013]K大数查询 解题报告

    P3332 [ZJOI2013]K大数查询 题目描述 有\(N\)个位置,\(M\)个操作.操作有两种,每次操作如果是\(\tt{1\ a\ b\ c}\)的形式表示在第\(a\)个位置到第\(b\) ...

  2. [洛谷P3332][ZJOI2013]K大数查询

    题目大意:有$n$个位置,$m$个操作.操作有两种: $1\;l\;r\;x:$在区间$[l,r]$每个位置加上一个数$x$ $2\;l\;r\;k:$询问$[l,r]$中第$k$大的数是多少. 题解 ...

  3. 洛谷 P3332 [ZJOI2013]K大数查询 (整体二分理解)

    链接: P3332 题意: 维护 \(n(1\leq n\leq 5\times10^4)\) 个可重整数集,编号从 \(1\) 到 \(n\).有 \(m(1\leq m\leq5\times10^ ...

  4. 洛谷 P3332 [ZJOI2013]K大数查询 || bzoj3110

    用树套树就很麻烦,用整体二分就成了裸题.... 错误: 1.尝试线段树套平衡树,码农,而且n*log^3(n)慢慢卡反正我觉得卡不过去 2.线段树pushdown写错...加法tag对于区间和的更新应 ...

  5. 【bzoj3110】[Zjoi2013]K大数查询 权值线段树套区间线段树

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...

  6. BZOJ3110[Zjoi2013]K大数查询——权值线段树套线段树

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是 ...

  7. P3332 [ZJOI2013]K大数查询(线段树套线段树+标记永久化)

    P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树 把插入的值离散化一下开个线段树 蓝后每个节点开个线段树,维护一下每个数出现的区间和次数 为了防止MLE动态开点就好辣 重点是标记永久 ...

  8. [BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树)

    [BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树) 题面 原题面有点歧义,不过从样例可以看出来真正的意思 有n个位置,每个位置可以看做一个集合. ...

  9. P3332 [ZJOI2013]K大数查询

    传送门 注意操作 $1$ 是在区间的每个位置加入一个数,不是加上一个值 相当于每个位置维护的是一个集合 显然树套树 一开始想的是区间线段树套权值线段树 发现这样询问区间第 $K$ 大时就要先二分答案再 ...

随机推荐

  1. 页面的URL分析----window.location.href

    window.location是页面的位置对象window.location.href是 location的一个属性值,并且它是location的默认属性. window.location直接赋值一个 ...

  2. Windows7下Thingworx 7安装

    1.环境准备 Windows7 64位+JDK8+Tomcat8+PostgreSQL9 2.安装JDK8和Tomcat8 这里没有什么太多值得叙述的,基本都是一路下一步. 需要注意的是,一个是Tom ...

  3. Mojo C++ System API

    This document is a subset of the Mojo documentation. Contents Overview Scoped, Typed Handles Message ...

  4. Mybatis传递多个参数的解决办法(三种)

    第一种方案 DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id="s ...

  5. 基于 Token 的身份验证:JSON Web Token

    最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twitter,Google+,Github 等等,比起传统的身份验证方法,Token 扩展性更强, ...

  6. NOIp模拟赛三十四(yxq供题)

    毒瘤yxq! 毒瘤yxq! 毒瘤yxq! 据yxq自己说,林导让他出题的时候要求是“代码量少”,“思维难度高”,“不涉及太复杂的算法”,而且“最好要让myh有一题做不出来”(狙击myh).于是今天的题 ...

  7. HDU 6315 Naive Operations(线段树+复杂度均摊)

    发现每次区间加只能加1,最多全局加\(n\)次,这样的话,最后的答案是调和级数为\(nlogn\),我们每当答案加1的时候就单点加,最多加\(nlogn\)次,复杂度可以得当保证. 然后问题就是怎么判 ...

  8. 单机Mongo复制集安装配置(数据库版本:4.x)

      官方文档: https://docs.mongodb.com/manual/tutorial/deploy-replica-set-with-keyfile-access-control/#dep ...

  9. ubuntu安装和使用

    1.查看ubuntu是32位还是64位 教程:jingyan.baidu.com/article/db55b609ab531f4ba30a2f13.html 2.安装maven 教程:www.linu ...

  10. docker mysql 文件挂载和MySQL字符集设置

    原文:docker mysql 文件挂载和MySQL字符集设置 docker run -p 3306:3306 --name mysql -v /usr/local/mysql/my.cnf:/etc ...