题目链接

洛谷

bzoj

题解

整体二分

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大数查询的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. BZOJ 3110 [Zjoi2013]K大数查询(整体二分)

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 11654  Solved: 3505[Submit][St ...

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

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

  8. [BZOJ 3110] [Zjoi2013] K大数查询 【树套树】

    题目链接: BZOJ - 3110 题目分析 这道题是一道树套树的典型题目,我们使用线段树套线段树,一层是区间线段树,一层是权值线段树.一般的思路是外层用区间线段树,内层用权值线段树,但是这样貌似会很 ...

  9. BZOJ 3110 [Zjoi2013]K大数查询 (CDQ分治+树状数组)

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

随机推荐

  1. 【bzoj1015】星球大战starwar

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 5139  Solved: 2332[Submit ...

  2. libevent源码深度剖析十二

    libevent源码深度剖析十二 ——让libevent支持多线程 张亮 Libevent本身不是多线程安全的,在多核的时代,如何能充分利用CPU的能力呢,这一节来说说如何在多线程环境中使用libev ...

  3. Ubuntu 查看软件版本

    Boost dpkg -S /usr/include/boost/version.hpp OpenCV pkg-config --modversion opencv

  4. 为什么要有http响应码

    其实还是比较容易理解的.这就和你去小卖部买东西一样,老板,我想要一袋大米,那老板先得回答有还是没有,还是说我们这没有,去其它地方买去吧,得先给个说法,这个说法就是http相应码,有了http响应码之后 ...

  5. CompositePattern(23种设计模式之一)

    设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...

  6. python3-递归

    # Auther: Aaron Fan """递归特性:1. 必须有一个明确的结束条件2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少3. 递归效率不高,递 ...

  7. getContextPath、getServletPath、getRequestURI,getRealPath的区别

    假定你的web application 项目名称为news,你在浏览器中输入请求路径: http://localhost:8080/news/main/list.jsp 则执行下面向行代码后打印出如下 ...

  8. 打造一套UI与后台并重.net通用权限管理系统

    一.前言 从进行到软件开发这个行业现在已经有几年了,在整理出这个套开发框架之前自己做了不少重复造轮子的事.每次有新的项目总是要耗费不少时间在UI.权限和系统通用模块上面,自己累得要死,老板还骂没效率. ...

  9. 如何解决某个jar包的依赖冲突问题

    我用的是idea集成开发环境,因此以该开发工具讲解. 首先在在Terminal窗口中,键入:mvn dependency:tree -Dincludes=com.google.guava 如果不加-D ...

  10. c++基础之向量Vector

    首先和string一样要在开头 #include <vector> #include <string> 和string一样,也算是一种容器,而且同属于STL(standard ...