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. trie字典树

    ---恢复内容开始--- 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 #include <bits/stdc++.h> usin ...

  2. DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.

    DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库. 它是轻量级的,不依赖任何其他类库(如JQuery)并且高度可定制. 试试看! 将文件拖至此处或点击上传.(这仅仅是 dropzo ...

  3. .Net拾忆:Asp.net请求管道

    w3wp.exe应该很熟悉,调试应用时候附加到进程就是这个服务:w3wp.exe和应用池相关联,每个应用池会有一个w3wp; 一.Http请求到iis应用池 IIS 5.x iis运行在inetinf ...

  4. UVAL 3942 Remember the Word(递推+Trie)

    Remember the Word [题目链接]Remember the Word [题目类型]递推+Trie &题解: 蓝书P209,参考的别人公开代码 &代码: #include ...

  5. LeetCode112.路径总和

    给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = 22 ...

  6. WinSock学习笔记

    Socket(套接字)◆先看定义: typedef unsigned int u_int; typedef u_int SOCKET; ◆Socket相当于进行网络通信两端的插座,只要对方的Socke ...

  7. 使用JFileChooser实现在指定文件夹下批量添加根据“数字型样式”或“非数字型样式”命令的文件夹

    2018-11-05 20:57:00开始写 Folder.java类 import javax.swing.JFrame; import javax.swing.JPanel; import jav ...

  8. ubuntu 换源过程中遇到的坑(一):Could not resolve 'mirrors.aliyun.com'

    执行更新数据(sudo apt-get update)提示: Err http://mirrors.aliyun.com trusty Release.gpg Could not resolve 'm ...

  9. HttpServletRequestWrapper

    1). why 需要改变从 Servlet 容器 (可能是任何的 Servlet 容器)中传入的 HttpServletRequest 对象的某个行为,该怎么办? 一. 继承 HttpServletR ...

  10. C# 自定义承载控件

    例如ToolStripTextBox类,里面的封装就是一个TextBox控件..NET的类库提供了ToolStripComBox和ToolStripProgressBar两个类.这些类都是从ToolS ...