传送门

一开始想的是区间线段树套权值线段树,结果好像不能实现。

然后题解是权值线段树套区间线段树。

区间线段树上标记永久化就省去了pushdown的操作减少常数。

标记永久化的话。。yy不出来就看代码吧。

然后注意开long long

#include <cstdio>
#include <iostream>
#include <algorithm>
#define N 50010
#define LL long long using namespace std; int n, m, t, cnt;
LL sum[N * 200];
int opt[N], a[N], b[N], c[N], g[N], add[N * 200], ls[N * 200], rs[N * 200], root[N << 2]; inline int read()
{
int x = 0, f = 1;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return x * f;
} inline void insert2(int &now, int l, int r, int x, int y)
{
if(!now) now = ++cnt;
if(x <= l && r <= y)
{
add[now]++;
sum[now] += r - l + 1;
return;
}
int mid = (l + r) >> 1;
if(x <= mid) insert2(ls[now], l, mid, x, y);
if(mid < y) insert2(rs[now], mid + 1, r, x, y);
sum[now] = sum[ls[now]] + sum[rs[now]] + (LL)(r - l + 1) * add[now];
} inline void insert1(int now, int l, int r, int d, int x, int y)
{
insert2(root[now], 1, n, x, y);
if(l == r) return;
int mid = (l + r) >> 1;
if(d <= mid) insert1(now << 1, l, mid, d, x, y);
else insert1(now << 1 | 1, mid + 1, r, d, x, y);
} inline LL query2(int now, int l, int r, int x, int y)
{
if(x <= l && r <= y) return sum[now];
LL tmp = 0;
int mid = (l + r) >> 1;
if(x <= mid) tmp += query2(ls[now], l, mid, x, y);
if(mid < y) tmp += query2(rs[now], mid + 1, r, x, y);
return tmp + (LL)(min(r, y) - max(l, x) + 1) * add[now];
} inline int query1(int now, int l, int r, LL d, int x, int y)
{
if(l == r) return l;
int mid = (l + r) >> 1;
LL tmp = query2(root[now << 1 | 1], 1, n, x, y);
if(tmp < d) return query1(now << 1, l, mid, d - tmp, x, y);
else return query1(now << 1 | 1, mid + 1, r, d, x, y);
} int main()
{
int i;
n = read();
m = read();
for(i = 1; i <= m; i++)
{
opt[i] = read();
a[i] = read(), b[i] = read(), c[i] = read();
if(opt[i] == 1) g[++t] = c[i];
}
sort(g + 1, g + t + 1);
t = unique(g + 1, g + t + 1) - g - 1;
for(i = 1; i <= m; i++)
if(opt[i] == 1)
{
c[i] = lower_bound(g + 1, g + t + 1, c[i]) - g;
insert1(1, 1, t, c[i], a[i], b[i]);
}
else printf("%d\n", g[query1(1, 1, t, c[i], a[i], b[i])]);
return 0;
}

  

[luoguP3332] [ZJOI2013]K大数查询(树套树)的更多相关文章

  1. P3332 [ZJOI2013]K大数查询(线段树套线段树+标记永久化)

    P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树 把插入的值离散化一下开个线段树 蓝后每个节点开个线段树,维护一下每个数出现的区间和次数 为了防止MLE动态开点就好辣 重点是标记永久 ...

  2. 【bzoj3110】[Zjoi2013]K大数查询 整体二分+树状数组区间修改

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...

  3. BZOJ.3110.[ZJOI2013]K大数查询(整体二分 树状数组/线段树)

    题目链接 BZOJ 洛谷 整体二分求的是第K小(利用树状数组).求第K大可以转为求第\(n-K+1\)小,但是这样好像得求一个\(n\). 注意到所有数的绝对值\(\leq N\),将所有数的大小关系 ...

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

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

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

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

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

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

  7. Cogs 1345. [ZJOI2013] K大数查询(树套树)

    [ZJOI2013] K大数查询 /* 树套树写法. bzoj过不了. 可能有负数要离散吧. 线段树套线段树. 外层权值线段树,内层区间线段树维护标记. 对权值建一棵权值线段树. 某个点表示权值在某个 ...

  8. BZOJ 3110: [Zjoi2013]K大数查询( 树状数组套主席树 )

    BIT+(可持久化)权值线段树, 用到了BIT的差分技巧. 时间复杂度O(Nlog^2(N)) ---------------------------------------------------- ...

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

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

随机推荐

  1. 使用OpenFileDialog组件打开对话框

    实现效果: 知识运用: OpenFileDialog组件的ShowDialog方法 public DialogResult Show () //返回枚举值 DialogRrsult.OK  或  Di ...

  2. PHP中可变变量到底有什么用?

    转自:http://blog.csdn.net/engine_1124/article/details/8660291 什么是可变变量? PHP提供了一种其他类型的变量——可变变量.可变变量允许我们动 ...

  3. Cookie 与 Session 的区别

    Cookie与Session的区别 cookie的简介 cookie是Web服务器保存在客户端的一系列文本信息 cookie的作用 对特定对象的追踪 统计网页浏览次数 简化登录 安全性能:容易信息泄露 ...

  4. SQLSERVER存储过程的基本语法实例

    SQLSERVER存储过程的基本语法实例 SQLSERVER存储过程的基本语法实例 一.定义变量--简单赋值 declare @a intset @a=5 print @a --使用select语句赋 ...

  5. Vue项目中遇到的一些问题总结

    一.开发环境使用Ajax请求,报错  网上查的资料,在config中的index.js这样设置 proxyTable:{ '/api':{ target:'', //此处为你的API接口地址 chan ...

  6. 如何使用koa实现socket.io官网的例子

    socket.io官网中使用express实现了一个最简单的IM即时聊天,今天我们使用koa来实现一下 ### 框架准备 确保你本地已经安装好了nodejs和npm,使用koa要求node版本> ...

  7. OAuth2.0 social_django微博第三方登录

    python网站第三方登录,social-auth-app-django模块, social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块 目前流行的第三方 ...

  8. oracle redo 重做日志文件

    以下易容翻译自oracle dba官方文档,不足之处还望指出. 管理重做日志文件 学习目标:1.解释重做日志文件的目的2.描述重做日志文件的结构3.学会控制日志切换与检查点4.多元化管理重做日志文件5 ...

  9. HDU:2594-Simpsons’ Hidden Talents

    Simpsons' Hidden Talents Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...

  10. MySQL创建数据库及用户

    create database ${db_name} default charset utf8 COLLATE utf8_general_ci; grant all on ${db_name}.* t ...