题面

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

本来想两个都动态开点的,这样能体现树套树在线的优越性。但是常数太大惹,所以外层直接固定建树了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. Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)---->第3节: recycler的使用和创建

    Netty源码分析第八章: 高性能工具类FastThreadLocal和Recycler 第三节: recycler的使用和创建   这一小节开始学习recycler相关的知识, recycler是n ...

  2. MATLAB2018a与2016b分类学习模型Java库向上兼容操作

    matlab2016版本无法兼容matlab2018版本Classification Learner创建的分类器 在java环境下,使用matlab2016版本调用matlab2018版本Classi ...

  3. exit命令详解

    基础命令学习目录首页 原文链接:https://www.cnblogs.com/itcomputer/p/4157859.html 用途说明 exit命令用于退出当前shell,在shell脚本中可以 ...

  4. WinForm中从SQLite数据库获取数据显示到DataGridView

    1.关于Sqlite Sqlite是一款开源的.适合在客户端和嵌入式设备中使用的轻量级数据库,支持标准的SQL. 不像SqlServer或Oracle的引擎是一个独立的进程.通过TCP或命名管道等与程 ...

  5. [linux] 利用PROMPT_COMMAND实现命令审计

    网上查了实现命令审计大概有以下几种: 查不到了,改天再补充 以下环境基于CentOS 6 1.修改history时间格式 echo 'HISTTIMEFORMAT="%F %T " ...

  6. 前端_JavaScript

    目录 JavaScript的基础 引入方式 JS的变量.常量和标识符 JS的数据类型 运算符 流程控制 JavaScript的对象 String对象 Array对象 Date对象 Math对象 Fun ...

  7. 20172321 2017-2018-2 《Java程序设计》第二周学习总结

    20172321 2017-2018-2 <Java程序设计>第二周学习总结 教材学习内容总结 第一章要点: 要点1 字符串:print和println用法的区别,字符串的拼接,java中 ...

  8. Servlet 3.0对上传的支持

    Servlet 2.5 进行上传   首先对表单的要求     ->method ="post"    ->enctype="multipart/form-d ...

  9. Mutual and feedback(互评与反馈)

    互评与反馈: 注:我在收集各小组对我小组的评价了,发现有几个没有收集到,不知道是我看不到还是贵小组不小心遗漏了对我小组的评价,如果看到,请给我留意,谢谢! 组名                  对我 ...

  10. 【搜索】POJ-3669 BFS

    一.题目 Description Bessie hears that an extraordinary meteor shower is coming; reports say that these ...