题解很多,实现起来以外地简洁。内层的区间线段树上用了标记永久化。

#include<cstdio>
using namespace std;
#define N 50001
struct Node{int sumv,tag,lc,rc;}T[N*256];
int e;
int n,m;
void Update(int ql,int qr,int cur,int l,int r)
{
if(ql<=l&&r<=qr)
++T[cur].tag;
else
{
int m=(l+r>>1);
if(ql<=m)
{
if(!T[cur].lc) T[cur].lc=++e;
Update(ql,qr,T[cur].lc,l,m);
}
if(m<qr)
{
if(!T[cur].rc) T[cur].rc=++e;
Update(ql,qr,T[cur].rc,m+1,r);
}
}
T[cur].sumv=T[T[cur].lc].sumv+T[T[cur].rc].sumv+T[cur].tag*(r-l+1);
}
int Query(int ql,int qr,int cur,int l,int r,int tag)
{
if(ql<=l&&r<=qr) return T[cur].sumv+(r-l+1)*tag;
int m=(l+r>>1),res=0;
if(ql<=m) res+=Query(ql,qr,T[cur].lc,l,m,tag+T[cur].tag);
if(m<qr) res+=Query(ql,qr,T[cur].rc,m+1,r,tag+T[cur].tag);
return res;
}
int root[N<<2];
void Update_2D(int ql,int qr,int p,int rt,int l,int r)
{
if(!root[rt]) root[rt]=++e;
Update(ql,qr,root[rt],1,n);
if(l==r) return;
int m=(l+r>>1);
if(p<=m) Update_2D(ql,qr,p,rt<<1,l,m);
else Update_2D(ql,qr,p,rt<<1|1,m+1,r);
}
int Query_2D(int ql,int qr,int K,int rt,int l,int r)
{
if(l==r) return l;
int m=(l+r>>1);
int Src=Query(ql,qr,root[rt<<1|1],1,n,0);
if(Src>=K) return Query_2D(ql,qr,K,rt<<1|1,m+1,r);
else return Query_2D(ql,qr,K-Src,rt<<1,l,m);
}
int main()
{
int op,x,y,z;
scanf("%d%d",&n,&m);
for(;m;--m)
{
scanf("%d%d%d%d",&op,&x,&y,&z);
if(op==1) Update_2D(x,y,z,1,1,n);
else printf("%d\n",Query_2D(x,y,z,1,1,n));
}
return 0;
}

【树套树】bzoj3110 [Zjoi2013]K大数查询的更多相关文章

  1. 树套树专题——bzoj 3110: [Zjoi2013] K大数查询 &amp; 3236 [Ahoi2013] 作业 题解

    [原题1] 3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 978  Solved: 476 Descri ...

  2. BZOJ3110[Zjoi2013]K大数查询(树状数组+整体二分)

    3110 [Zjoi2013]K大数查询 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a ...

  3. BZOJ3110 [Zjoi2013]K大数查询 树套树 线段树 整体二分 树状数组

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3110 题意概括 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位 ...

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

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

  5. bzoj3110: [Zjoi2013]K大数查询 【cdq分治&树套树】

    模板题,折腾了许久. cqd分治整体二分,感觉像是把询问分到答案上. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = ...

  6. [BZOJ3110] [Zjoi2013] K大数查询 (树套树)

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

  7. BZOJ3110: [Zjoi2013]K大数查询

    喜闻乐见的简单树套树= =第一维按权值建树状数组,第二维按下标建动态开点线段树,修改相当于第二维区间加,查询在树状数组上二分,比一般的线段树还短= =可惜并不能跑过整体二分= =另外bzoj上的数据有 ...

  8. bzoj3110: [Zjoi2013]K大数查询 【树套树,标记永久化】

    //========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/  转载要声明! //=============== ...

  9. bzoj3110 [Zjoi2013]K大数查询——线段树套线段树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3110 外层权值线段树套内层区间线段树: 之所以外层权值内层区间,是因为区间线段树需要标记下传 ...

随机推荐

  1. MySQL 数据库性能优化之缓存参数优化

    在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣 ...

  2. [hdu 3068] Manacher算法O(n)最长回文子串

    一个不错的讲解:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/01.05.md # ...

  3. Linux Top 命令参数解析

    转载自:http://www.jb51.net/LINUXjishu/34604.html TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户 ...

  4. CSS选择器及CSS3新增选择器

    转自:http://www.cnblogs.com/libingql/p/4375354.html 1. CSS1定义的选择器 选择器 类型 说明 E 类型选择器 选择指定类型的元素 E#id ID选 ...

  5. vue遇到的坑(一)——数组更新

    最近在项目中遇到个问题,数组已经更新了,但是页面中的DOM并没有触发变化.我一直以来的想法就是: 既然vue实现的实时数据双向绑定,那么在model层发生了变化之后为什么就没有在view层更新呢? 在 ...

  6. MyBatis对象关联关系----多对多的保存与查询

    模拟情景: 对象:学生,课程 关系:一个学生可选多个课程,一门课程可被多个学生选择 一.保存 1.创建数据库表,student,course,student_course,其中student_cour ...

  7. centos配置数据源和java环境配置

    ---恢复内容开始--- 一:前言 今天送走了一位同事,看着别人走勾起了我蠢蠢欲动的心啊,但是我知道,我不能那么的任性,我是men,这几天难得的清闲,所以我就弄一弄linux,昨天把网给配通了,今天配 ...

  8. HDFS 的Trash回收站

    1)在core-site.xml文件中添加这个配置 在每个节点(不仅仅是主节点)上添加配置 core-site.xml,增加如下内容 <property> <name>fs.t ...

  9. #error,在xib文件中拷贝按钮所造成的错误.

    https://www.evernote.com/shard/s227/sh/3e35a7b3-f40c-46df-8ae0-e7522310c18b/742311974127f12eaafae07a ...

  10. 【洛谷 P4168】[Violet]蒲公英(分块)

    题目链接 题目大意:给定\(n\)个数和\(m\)个求区间众数的询问,强制在线 这题我\(debug\)了整整一个下午啊..-_- 从14:30~16:45终于\(debug\)出来了,\(debug ...