洛谷 P3332 BZOJ 3110 [ZJOI2013]K大数查询
题目链接
题解
整体二分
Code
#include<bits/stdc++.h>
#define LL long long
#define RG register
using namespace std;
inline int gi() {
RG int x = 0; RG char c = getchar(); bool f = 0;
while (c != '-' && (c < '0' || c > '9')) c = getchar();
if (c == '-') c = getchar(), f = 1;
while (c >= '0' && c <= '9') x = x*10+c-'0', c = getchar();
return f ? -x : x;
}
const int N = 50010;
int n, m;
#define ls (rt<<1)
#define rs (rt<<1|1)
LL t[N<<2], z[N<<2];
inline void pushdown(int rt, int l, int r) {
if (z[rt]) {
int mid = (l + r) >> 1;
t[ls] += (mid-l+1)*z[rt]; t[rs] += (r-mid)*z[rt];
z[ls] += z[rt]; z[rs] += z[rt];
z[rt] = 0;
}
return;
}
inline void update(int rt, int l, int r, int L, int R, int k) {
if (L <= l && r <= R) {
z[rt] += k;
t[rt] += k*(r-l+1);
return ;
}
int mid = (l + r) >> 1;
pushdown(rt, l, r);
if (L <= mid)
update(ls, l, mid, L, R, k);
if (R > mid)
update(rs, mid+1, r, L, R, k);
t[rt] = t[ls]+t[rs];
return ;
}
inline LL query(int rt, int l, int r, int L, int R) {
if (L <= l && r <= R) return t[rt];
int mid = (l + r) >> 1;
LL s = 0;
pushdown(rt, l, r);
if (L <= mid)
s = query(ls, l, mid, L, R);
if (R > mid)
s += query(rs, mid+1, r, L, R);
t[rt] = t[ls]+t[rs];
return s;
}
struct Question {
int op, a, b, id;
LL c;
}q[N], lq[N], rq[N];
LL ans[N];
void div(int l, int r, int st, int ed) {
if (st > ed) return ;
if (l == r) {
for (int i = st; i <= ed; i++)
if (q[i].op == 2)
ans[q[i].id] = l;
return ;
}
int mid = (l + r) >> 1, lt = 0, rt = 0;
for (int i = st; i <= ed; i++) {
if (q[i].op == 1) {
if (q[i].c <= mid)
lq[++lt] = q[i];
else update(1, 1, n, q[i].a, q[i].b, 1), rq[++rt] = q[i];
}
else {
LL s = query(1, 1, n, q[i].a, q[i].b);
if (s >= q[i].c) rq[++rt] = q[i];
else q[i].c -= s, lq[++lt] = q[i];
}
}
for (int i = st; i <= ed; i++)
if (q[i].op == 1 && q[i].c > mid) update(1, 1, n, q[i].a, q[i].b, -1);
for (int i = 1; i <= lt; i++)
q[st+i-1] = lq[i];
for (int i = 1; i <= rt; i++)
q[st+lt+i-1] = rq[i];
div(l, mid, st, st+lt-1); div(mid+1, r, st+lt, ed);
return ;
}
int main() {
n = gi(); m = gi();
int k = 0;
for (int i = 1; i <= m; i++) {
q[i].op = gi(), q[i].a = gi(), q[i].b = gi();
scanf("%lld", &q[i].c);
q[i].id = (q[i].op == 2) ? ++k : 0;
}
div(-n, n, 1, m);
for (int i = 1; i <= k; i++)
printf("%lld\n", ans[i]);
return 0;
}
洛谷 P3332 BZOJ 3110 [ZJOI2013]K大数查询的更多相关文章
- BZOJ 3110: [Zjoi2013]K大数查询 [树套树]
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6050 Solved: 2007[Submit][Sta ...
- 树套树专题——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: 1384 Solved: 629[Submit][Stat ...
- BZOJ 3110: [Zjoi2013]K大数查询( 树状数组套主席树 )
BIT+(可持久化)权值线段树, 用到了BIT的差分技巧. 时间复杂度O(Nlog^2(N)) ---------------------------------------------------- ...
- BZOJ 3110([Zjoi2013]K大数查询-区间第k大[段修改,在线]-树状数组套函数式线段树)
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 418 Solved: 235 [ Submit][ ...
- BZOJ 3110 [Zjoi2013]K大数查询(整体二分)
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 11654 Solved: 3505[Submit][St ...
- BZOJ.3110.[ZJOI2013]K大数查询(整体二分 树状数组/线段树)
题目链接 BZOJ 洛谷 整体二分求的是第K小(利用树状数组).求第K大可以转为求第\(n-K+1\)小,但是这样好像得求一个\(n\). 注意到所有数的绝对值\(\leq N\),将所有数的大小关系 ...
- [BZOJ 3110] [Zjoi2013] K大数查询 【树套树】
题目链接: BZOJ - 3110 题目分析 这道题是一道树套树的典型题目,我们使用线段树套线段树,一层是区间线段树,一层是权值线段树.一般的思路是外层用区间线段树,内层用权值线段树,但是这样貌似会很 ...
- BZOJ 3110 [Zjoi2013]K大数查询 (CDQ分治+树状数组)
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是 ...
随机推荐
- 张超超OC基础回顾02_成员变量(属性),局部变量,全局变量的区别
成员变量: 写在类声明的大括号中的变量, 我们称之为 成员变量(属性, 实例变量) 成员变量只能通过对象来访问 注意: 成员变量不能离开类, 离开类之后就不是成员变量 成员变量不能在定义的同时进行初始 ...
- PHP防止木马攻击的措施
防止跳出web目录 只允许你的PHP脚本在web目录里操作,针对Apache,还可以修改httpd.conf文件限制PHP操作路径. 例如:php_admin_value open_basedir( ...
- VMware下Ubuntu虚拟机NAT模式 连接Xshell
1.Edit->Virtual NetWork Editor 2.选择NAT->NAT Settings 配置端口映射关系 很重要! Host port: 真实主机 一般是Windows端 ...
- javascript总结13:循环语句
1 While循环 While(条件表达式){ 只要条件表达式结果为true,循环一直执行,当条件表达式结果为false的时候,循环终止 } While循环语句需现在循环体外定义变量. 2 for循环 ...
- jQuery form 插件
http://jquery.malsup.com/form/#getting-started 举例: $(document).ready(function() { $('#ff').ajaxForm( ...
- 升级Ubuntu 12.04下的gcc到4.7
我们知道C++11标准开始支持类内初始化(in-class initializer),Qt creator编译出现error,不支持这个特性,原因在于,Ubuntu12.04默认的是使用gcc4.6, ...
- 《Wonderland: A Novel Abstraction-Based Out-Of-Core Graph Processing System》章明星
在2018年3月28日于美国弗吉尼亚州威廉斯堡结束的ACM ASPLOS 2018会议上,计算机系高性能所师生发表了两篇长文.一篇是我系博士生章明星为第一作者,导师武永卫为通讯作者的“Wonderla ...
- 2014-4-2解决无法访问github和google的问题
github是个好地方,但是上不去就蛋疼了. 今天github上不去,果断f12下,看下network,发现里面好多请求都是指向 github.global.ssl.fastly.net这个域名的,然 ...
- Linux服务器其中一个磁盘满了怎么办?在不做磁盘扩容的情况下,一个软连接就搞定。
适用环境要求:Linux系统及服务器.有管理员权限.存在多余空间的磁盘例如下图中"/home"在磁盘sda5中与"/"不属于同一块磁盘: 1.首先转移正在使用的 ...
- <select>标签默认值设置
<td> <label>操作类型:</label> <select id="operation_type" class="com ...