P3332 [ZJOI2013]K大数查询

权值线段树套区间线段树

把插入的值离散化一下开个线段树

蓝后每个节点开个线段树,维护一下每个数出现的区间和次数

为了防止MLE动态开点就好辣

重点是标记永久化,就是不下传标记,而是每次询问时算上路径上的标记

标记永久化后快了1倍

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rint register int
using namespace std;
typedef long long ll;
inline int Min(int a,int b){return a<b?a:b;}
inline int Max(int a,int b){return a>b?a:b;}
void gi(int &x){
static char c=getchar();x=;
while(c<''||c>'') c=getchar();
while(''<=c&&c<='') x=x*+(c^),c=getchar();
}
void gll(ll &x){
static char c=getchar();x=; bool f=;
while(c<''||c>'') f=f&&(c!='-'),c=getchar();
while(''<=c&&c<='') x=x*+(c^),c=getchar();
x=f?x:-x;
}
#define N 50005
#define W 20000005
int n,m,u,tn,opt[N],L[N],R[N],b[N],rt[],lc[W],rc[W],add[W];
ll k[N],sum[W];
#define mid (l+r)/2
void Add(int &o,int l,int r,int x1,int x2){
if(!o) o=++u;
sum[o]+=Max(Min(x2,r)-Max(x1,l)+,);//遍历过程中先处理掉sum
if(x1<=l&&r<=x2){++add[o]; return ;}//标记永久化
if(x1<=mid) Add(lc[o],l,mid,x1,x2);
if(x2>mid) Add(rc[o],mid+,r,x1,x2);
}
ll Ask(int o,int l,int r,int x1,int x2,ll t){
if(!o) return t*Max(Min(x2,r)-Max(x1,l)+,);//注意不返回0
if(x1<=l&&r<=x2) return sum[o]+t*(r-l+);
ll re=;
if(x1<=mid) re+=Ask(lc[o],l,mid,x1,x2,t+add[o]);//累加路径上的标记
if(x2>mid) re+=Ask(rc[o],mid+,r,x1,x2,t+add[o]);
return re;
}
void ins(int o,int l,int r,int x1,int x2,int v){
Add(rt[o],,n,x1,x2);
if(l==r) return ;
if(v<=mid) ins(o<<,l,mid,x1,x2,v);
else ins(o<<|,mid+,r,x1,x2,v);
}
int ask(int o,int l,int r,int x1,int x2,ll v){
if(l==r) return b[l];
ll tmp=Ask(rt[o<<|],,n,x1,x2,);
if(v<=tmp) return ask(o<<|,mid+,r,x1,x2,v);
else return ask(o<<,l,mid,x1,x2,v-tmp);
}
int main(){
gi(n);gi(m);
for(rint i=;i<=m;++i){
gi(opt[i]);gi(L[i]);gi(R[i]);gll(k[i]);
if(opt[i]==) b[++tn]=k[i];
}sort(b+,b+tn+);
tn=unique(b+,b+tn+)-b-;//离散化
for(rint i=;i<=m;++i)
if(opt[i]==) k[i]=lower_bound(b+,b+tn+,k[i])-b;
for(rint i=;i<=m;++i){
if(opt[i]==) ins(,,tn,L[i],R[i],k[i]);
else printf("%d\n",ask(,,tn,L[i],R[i],k[i]));
}return ;
}

P3332 [ZJOI2013]K大数查询(线段树套线段树+标记永久化)的更多相关文章

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

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

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

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

  3. P3332 [ZJOI2013]K大数查询

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

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

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

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

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

  6. 洛谷P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树_标记永久化

    Code: #include <cstdio> #include <algorithm> #include <string> #include <cstrin ...

  7. P3332 [ZJOI2013]K大数查询 整体二分

    终于入门整体二分了,勉勉强强算是搞懂了一个题目吧. 整体二分很多时候可以比较好的离线处理区间\(K\)大值的相关问题.考虑算法流程: 操作队列\(arr\),其中有询问和修改两类操作. 每次在答案的可 ...

  8. bzoj 3110: [Zjoi2013]K大数查询 树状数组套线段树

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1384  Solved: 629[Submit][Stat ...

  9. BZOJ 3110([Zjoi2013]K大数查询-区间第k大[段修改,在线]-树状数组套函数式线段树)

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec   Memory Limit: 512 MB Submit: 418   Solved: 235 [ Submit][ ...

随机推荐

  1. 用iframe嵌入了一个微信公众号平台文章的URL

    JS: $.ajaxPrefilter( function (options) { if (options.crossDomain && jQuery.support.cors) { ...

  2. 《Java程序设计》第一周学习记录(1)

    目录 Windows安装JDK.Git Linux下安装JDK.Git.IDEA 参考资料 Windows安装JDK.Git 到官网直接下载JDK,双击安装程序就正常安装就行了. 下载完以后,可以看到 ...

  3. IdentityServer4:IdentityServer4+API+Client实践OAuth2.0客户端模式(1)

    一.OAuth2.0 1.OAuth2.0概念 OAuth2.0(Open Authorization)是一个开放授权协议:第三方应用不需要接触到用户的账户信息(如用户名密码),通过用户的授权访问用户 ...

  4. iOS UI基础-7.0 UIScrollView

    概述 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限.当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容,普通的UIView不具备滚动功能,不能显示过多的 ...

  5. opencv之模糊处理

    初学OpenCV的开发者很容易被OpenCV中各种滤波方法所困扰,不知道到底该用哪里一个来做滤波.表面原因看起来是因为OpenCV中各种滤波方式实在是太多太杂, 其背后原因是对各种滤波方法的应用场景认 ...

  6. 正则表达式中\b和\s有什么区别

    字符串:abcsdsadas abc asdsadasdabcasdsa使用\sabc\s和\babc\b都能匹配中间的abc,这种方法不是重复了么,/s是匹配空格回车等得,/b网上教程说得不清楚什么 ...

  7. node.js中ws模块创建服务端和客户端,网页WebSocket客户端

    首先下载websocket模块,命令行输入 npm install ws 1.node.js中ws模块创建服务端 // 加载node上websocket模块 ws; var ws = require( ...

  8. Lua 可变参数之arg与select

    function TestFunc(...) local arg = { ... } --Lua .2以后不再支持默认arg参数,{}与...之间要有空格 print("输入的参数个数:&q ...

  9. mysql主从配置,读写分离

    Mysql主从配置,实现读写分离 大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库 ...

  10. word2vector 资料

    http://blog.csdn.net/garfielder007/article/details/51345201 https://cs224d.stanford.edu/lecture_note ...