题面

树套树,权值线段树套序列线段树,每次在在权值线段树上的每棵子树上做区间加,查询的时候左右子树二分

本来想两个都动态开点的,这样能体现树套树在线的优越性。但是常数太大惹,所以外层直接固定建树了QAQ

就是不写整体二分╭(╯^╰)╮

Warning:Extremely ugly code detected

 // luogu-judger-enable-o2
//I CAN PASS THE TEST
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int n,m,f,op,tot;
long long val[N];
int root[N],lson[N],rson[N],laz[N];
void read1(int &x)
{
x=; char ch=getchar();
while(!isdigit(ch))
ch=getchar();
while(isdigit(ch))
x=(x<<)+(x<<)+(ch^),ch=getchar();
}
void read2(int &x)
{
x=f=; char ch=getchar();
while(!isdigit(ch))
f|=ch=='-',ch=getchar();
while(isdigit(ch))
x=(x<<)+(x<<)+(ch^),ch=getchar();
x=f?-x:x;
}
void read3(long long &x)
{
x=; char ch=getchar();
while(!isdigit(ch))
ch=getchar();
while(isdigit(ch))
x=(x<<)+(x<<)+(ch^),ch=getchar();
}
void write(int x)
{
if(x>) write(x/);
putchar(x%|);
}
void Insert(int &nde,int ll,int rr,int l,int r)
{
if(ll>r||rr<l) return ;
if(!nde) nde=++tot;
val[nde]+=min(r,rr)-max(l,ll)+;
if(ll>=l&&rr<=r)
++laz[nde];
else
{
int mid=(ll+rr)>>;
Insert(lson[nde],ll,mid,l,r);
Insert(rson[nde],mid+,rr,l,r);
}
}
void Add(int l,int r,int v)
{
int nde=,ll=,rr=*n;
while(true)
{
Insert(root[nde],,n,l,r);
if(ll^rr)
{
int mid=(ll+rr)>>;
(v<=mid)?(nde<<=,rr=mid):(nde<<=,nde|=,ll=mid+);
}
else return ;
}
}
long long Query(int nde,int ll,int rr,int l,int r,int lz)
{
if(ll>r||rr<l)
return ;
else if(ll>=l&&rr<=r)
return val[nde]+1ll*lz*(rr-ll+);
else
{
int mid=(ll+rr)>>;
return Query(lson[nde],ll,mid,l,r,lz+laz[nde])+Query(rson[nde],mid+,rr,l,r,lz+laz[nde]);
}
}
int main()
{
register int i;
read1(n),read1(m);
for(i=;i<=m;i++)
{
read1(op);
if(op==)
{
int t1,t2,t3;
read1(t1),read1(t2),read2(t3);
int nde=,ll=,rr=*n; t3=n-t3+;
while(true)
{
Insert(root[nde],,n,t1,t2);
if(!(ll^rr)) break;
int mid=(ll+rr)>>;
(t3<=mid)?(nde<<=,rr=mid):(nde<<=,nde|=,ll=mid+);
}
}
else
{
int t1,t2; long long t4;
read1(t1),read1(t2),read3(t4);
int nde=,ll=,rr=*n;
while(true)
{
if(ll==rr) {write(n-ll+),puts(""); break;}
int mid=(ll+rr)/;
long long qry=Query(root[nde<<],,n,t1,t2,);
(t4<=qry)?(nde<<=,rr=mid):(nde<<=,nde|=,ll=mid+,t4-=qry);
}
}
}
return ;
}

解题:ZJOI 2013 K大数查询的更多相关文章

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

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

  2. 数据结构(树套树):ZJOI 2013 K大数查询

    有几个点卡常数…… 发现若第一维为位置,第二维为大小,那么修改时第一维修改区间,查询时第一维查询区间,必须挂标记.而这种情况下标记很抽象,而且Push_down不是O(1)的,并不可行. 那要怎么做呢 ...

  3. BZOJ 3110 ZJOI 2013 K大数查询 树套树(权值线段树套区间线段树)

    题目大意:有一些位置.这些位置上能够放若干个数字. 如今有两种操作. 1.在区间l到r上加入一个数字x 2.求出l到r上的第k大的数字是什么 思路:这样的题一看就是树套树,关键是怎么套,怎么写.(话说 ...

  4. [BZOJ 3110] [ZJOI 2013] K大数查询

    Description 有 \(N\) 个位置,\(M\) 个操作.操作有两种,每次操作如果是: 1 a b c:表示在第 \(a\) 个位置到第 \(b\) 个位置,每个位置加入一个数 \(c\): ...

  5. [ZJOI 2013] K大数查询

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3110 [算法] 整体二分 + 线段树 时间复杂度 : O(NlogN ^ 2) [代 ...

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

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

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

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

  8. BZOJ 3110: [Zjoi2013]K大数查询 [树套树]

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6050  Solved: 2007[Submit][Sta ...

  9. 区间K 大数查询

      算法训练 区间k大数查询   时间限制:1.0s   内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列 ...

随机推荐

  1. python如何与以太坊交互并将区块链信息写入SQLite

    关于区块链介绍性的研讨会通常以易于理解的点对点网络和银行分类账这类故事开头,然后直接跳到编写智能合约,这显得非常突兀.因此,想象自己走进丛林,想象以太坊区块链是一个你即将研究的奇怪生物.今天我们将观察 ...

  2. 解决SecureCRT小键盘乱码

    SecureCRT软件菜单,Options -> Session Options ->Terminal -> Emulation,右侧面板中"Terminal"选 ...

  3. TFS任务预览

    不太熟悉TFS任务项的建立. 初步建立及按老师要求分配到个人的任务设置与时间安排如下: (长时间任务可由多人合作完成,具体根据情况迅速调整任务分配) 加上每人需要进行阅读前一小组的代码需要时间2*8= ...

  4. 记事本APP之Alpha报告

    项目名称 记事本APP 项目版本 Alpha版本 负责人 北京航空航天大学计算机学院 Echo软件团队 联系方式 http://www.cnblogs.com/echo-buaa/ 要求发布日期 20 ...

  5. alpha版postmortem 报告

    一.团队开发存在的问题 此次会议我们团队中每个成员都仔细思考并提出了团队在这一阶段存在的问题,主要如下: 1.前期任务规划.分配不合适: 2.个人对认领任务模块完成度.了解度不够: 3.个人学习意识. ...

  6. Struts2框架学习

    Struts功能详解——ActionMapping对象 ActionMapping描述了struts中用户请求路径和Action的映射关系,在struts中每个ActionMapping都是通过pat ...

  7. Leetcode题库——17.电话号码的字母组合

    @author: ZZQ @software: PyCharm @file: letterCombinations.py @time: 2018/10/18 18:33 要求:给定一个仅包含数字 2- ...

  8. Ubuntu下ssh连接在服务端显示图形界面

    Ubuntu下ssh连接在服务端显示图形界面 step1 安装ssh服务 服务端安装运行ssh,在终端运行命令如下: sudo apt-get install openssh-server 在客户端安 ...

  9. 微信小程序Mustache语法

    小程序开发的wxml里,用到了Mustache语法.所以,非常有必要把Mustache研究下. 什么是Mustache?Mustache是一个logic-less(轻逻辑)模板解析引擎,它是为了使用户 ...

  10. 关于SVM数学细节逻辑的个人理解(二):从基本形式转化为对偶问题

    第二部分:转化为对偶问题进一步简化 这一部分涉及的数学原理特别多.如果有逻辑错误希望可以指出来. 上一部分得到了最大间隔分类器的基本形式:   其中i=1,2,3...m 直接求的话一看就很复杂,我们 ...