解题:ZJOI 2013 K大数查询
树套树,权值线段树套序列线段树,每次在在权值线段树上的每棵子树上做区间加,查询的时候左右子树二分
本来想两个都动态开点的,这样能体现树套树在线的优越性。但是常数太大惹,所以外层直接固定建树了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大数查询的更多相关文章
- [BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树)
[BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树) 题面 原题面有点歧义,不过从样例可以看出来真正的意思 有n个位置,每个位置可以看做一个集合. ...
- 数据结构(树套树):ZJOI 2013 K大数查询
有几个点卡常数…… 发现若第一维为位置,第二维为大小,那么修改时第一维修改区间,查询时第一维查询区间,必须挂标记.而这种情况下标记很抽象,而且Push_down不是O(1)的,并不可行. 那要怎么做呢 ...
- BZOJ 3110 ZJOI 2013 K大数查询 树套树(权值线段树套区间线段树)
题目大意:有一些位置.这些位置上能够放若干个数字. 如今有两种操作. 1.在区间l到r上加入一个数字x 2.求出l到r上的第k大的数字是什么 思路:这样的题一看就是树套树,关键是怎么套,怎么写.(话说 ...
- [BZOJ 3110] [ZJOI 2013] K大数查询
Description 有 \(N\) 个位置,\(M\) 个操作.操作有两种,每次操作如果是: 1 a b c:表示在第 \(a\) 个位置到第 \(b\) 个位置,每个位置加入一个数 \(c\): ...
- [ZJOI 2013] K大数查询
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3110 [算法] 整体二分 + 线段树 时间复杂度 : O(NlogN ^ 2) [代 ...
- 洛谷 P3332 [ZJOI2013]K大数查询 解题报告
P3332 [ZJOI2013]K大数查询 题目描述 有\(N\)个位置,\(M\)个操作.操作有两种,每次操作如果是\(\tt{1\ a\ b\ c}\)的形式表示在第\(a\)个位置到第\(b\) ...
- 树套树专题——bzoj 3110: [Zjoi2013] K大数查询 & 3236 [Ahoi2013] 作业 题解
[原题1] 3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 978 Solved: 476 Descri ...
- BZOJ 3110: [Zjoi2013]K大数查询 [树套树]
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6050 Solved: 2007[Submit][Sta ...
- 区间K 大数查询
算法训练 区间k大数查询 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列 ...
随机推荐
- docker 部署 zookeeper+kafka 集群
主机三台172.16.100.61172.16.100.62172.16.100.63Docker 版本 当前最新版 # 部署zk有2种方法 ## 注意 \后不要跟空格 一 . 端口映射 172.16 ...
- 2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算
一.结对对象 姓名:侯泽洋 学号:20172308 担任角色:驾驶员(侯泽洋) 伙伴第一周博客地址 二.本周内容 1.程序需求 (1).自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能 ...
- Alpha版会议总结
目前的进度: 实现了文字备忘的录入: 实现了提醒功能: 实现了可视化界面: 语音录入功能还没有完成: 界面相当粗糙: 遇到的问题: 语音录入按钮按下后没有反应,目前没有解决思路和方法. 原本的解屏功能 ...
- Leetcode题库——9.回文数
@author: ZZQ @software: PyCharm @file: HuiWenShu.py @time: 2018/9/16 16:51 要求:判断一个整数是否是回文数.回文数是指正序(从 ...
- git学习-综合性文章
文章:[转载]理解 Git 分支管理最佳实践 首先介绍了git各种分支:
- PythonWeb 服务部署文档及迁移到Linux相关
pythonWeb的部署(Django+Uwsgi): 1. 部署服务器上需要的Python3.6环境: 安装集成了python3.6 和pip ,virtualenv虚拟环境 的Anaconda(A ...
- 结对&团队之1715|K班取经
声明:同学请勿抄袭,追责莫要怪我: 因为暂时闲着没事,就翻阅学长学姐的博客找找灵感,个人觉得应该还有人和我一样对软工实践未来的一大段路还很天真,包括目前的结对作业和团队组队也很迷路,于是写下这篇博客提 ...
- 西门子S7系列PLC的主要种类及应用软件
德国西门子(SIEMENS)公司生产的可编程序控制器在我国的应用也相当广泛,在冶金.化工.印刷生产线等领域都有应用.西门子(SIEMENS)公司的PLC产品包括LOGO,S7-200,S7-300,S ...
- WPF里面制作圆角文本框
转自:http://www.cnblogs.com/mengxin523/archive/2010/04/04/1704448.html 本以为WPF里面的XAML会很强大,可以设置很多属性,比如文本 ...
- redux相关专业名词及函数提要
redux: 用来管理react app 状态(state)的一个架构. store: 通过createStore()创建,用来存放state,与react app是完全分离的.createStore ...