LINK

思路

神仙线段树

你考虑怎么样才能快速维护出答案

首先看看一条链怎么做?

首先很显然的思路是维护每个节点的是否出过队

然后对于重新入队的点

直接在后面暴力vector存一下就可以了

最核心的思路就是假设你已经知道了当前位置的点是什么编号,最后通过计算/查询来得出答案

然后不是链的情况其实就动态开点就可以了

因为有用的状态很少

然后就直接进行查询就可以了


//Author: dream_maker
#include<bits/stdc++.h>
using namespace std;
//----------------------------------------------
//typename
typedef long long ll;
//convenient for
#define fu(a, b, c) for (int a = b; a <= c; ++a)
#define fd(a, b, c) for (int a = b; a >= c; --a)
#define fv(a, b) for (int a = 0; a < (signed)b.size(); ++a)
//inf of different typename
const int INF_of_int = 1e9;
const ll INF_of_ll = 1e18;
//fast read and write
template <typename T>
void Read(T &x) {
bool w = 1;x = 0;
char c = getchar();
while (!isdigit(c) && c != '-') c = getchar();
if (c == '-') w = 0, c = getchar();
while (isdigit(c)) {
x = (x<<1) + (x<<3) + c -'0';
c = getchar();
}
if (!w) x = -x;
}
template <typename T>
void Write(T x) {
if (x < 0) {
putchar('-');
x = -x;
}
if (x > 9) Write(x / 10);
putchar(x % 10 + '0');
}
//----------------------------------------------
const int N = 3e5 + 10;
const int LOG = 40;
int tot = 0, n, m, q, p;
int rt[N], ls[N * LOG], rs[N * LOG], siz[N * LOG];
vector<ll> v[N];
void insert(int &t, int l, int r, int pos) {
if (!t) t = ++tot;
++siz[t];
if (l == r) return;
int mid = (l + r) >> 1;
if (pos <= mid) insert(ls[t], l, mid, pos);
else insert(rs[t], mid + 1, r, pos);
}
int query(int t, int l, int r, int k) {
if (l == r) return l;
int mid = (l + r) >> 1, sizl = mid - l + 1 - siz[ls[t]];
if (k <= sizl) return query(ls[t], l, mid, k);
else return query(rs[t], mid + 1, r, k - sizl);
}
ll query_single_row(ll x, ll y) {
ll res = query(rt[0], 1, p, x);
insert(rt[0], 1, p, res);
ll id = (res <= n) ? res * m : v[0][res - n - 1];
v[0].push_back(y ? y : id);
return id;
}
ll query_single_line(ll x, ll y) {
ll res = query(rt[x], 1, p, y);
insert(rt[x], 1, p, res);
ll id = (res < m) ? (x - 1) * m + res : v[x][res - m];
v[x].push_back(query_single_row(x, id));
return id;
}
int main() {
#ifdef dream_maker
freopen("input.txt", "r", stdin);
#endif
Read(n), Read(m), Read(q);
p = max(n, m) + q;
fu(i, 1, q) {
int x, y; Read(x), Read(y);
if (y == m) Write(query_single_row(x, 0));
else Write(query_single_line(x, y));
putchar('\n');
}
return 0;
}

LOJ2319. 「NOIP2017」列队【线段树】的更多相关文章

  1. loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点

    loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点 链接 loj 思路 用交错关系建出图来,发现可以直接缩点,拓扑统计. 完了吗,不,瓶颈在于边数太多了,线段树优化建图. 细节 ...

  2. 2018.11.01 loj#2319. 「NOIP2017」列队(线段树)

    传送门 唉突然回忆起去年去noipnoipnoip提高组试水然后省二滚粗的悲惨经历... 往事不堪回首. 所以说考场上真的有debuffdebuffdebuff啊!!!虽然当时我也不会权值线段树 这道 ...

  3. LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset

    题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直 ...

  4. bzoj5518 & loj3046 「ZJOI2019」语言 线段树合并+树链的并

    题目传送门 https://loj.ac/problem/3046 题解 首先问题就是问有多少条路径是给定的几条路径中的一条的一个子段. 先考虑链的做法. 枚举右端点 \(i\),那么求出 \(j\) ...

  5. LOJ 2551 「JSOI2018」列队——主席树+二分

    题目:https://loj.ac/problem/2551 答案是排序后依次走到 K ~ K+r-l . 想维护一个区间排序后的结果,使得可以在上面二分.求和:二分可以知道贡献是正还是负. 于是想用 ...

  6. LG1198/BZOJ1012 「JSOI2008」最大数 线段树+离线

    问题描述 LG1198 BZOJ1012 题解 我们把所有操作离线,设一共有\(n\)个插入操作. 于是提前建立\(n\)个数,全部设为\(-INF\) 接着逐个处理操作即可. \(\mathrm{C ...

  7. 「NOIP2017」列队

    传送门 Luogu 解题思路 一眼平衡树,应该没问题吧? 但我们一定要反应过来,单点的维护是非常之困难的,因为这是一个网格图而不仅仅是一条序列. 我们要考虑把修改操作全都放在序列上进行. 其实题面里是 ...

  8. LOJ #2005. 「SDOI2017」相关分析 线段树维护回归直线方程

    题目描述 \(Frank\) 对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. \(Frank\) 不仅喜欢观测,还喜欢分析观测到的 ...

  9. 「NOIP2017」宝藏

    「NOIP2017」宝藏 题解 博客阅读效果更佳 又到了一年一度NOIPCSP-S 赛前复习做真题的时间 于是就遇上了这道题 首先观察数据范围 \(1 \le n \le 12\) ,那么极大可能性是 ...

随机推荐

  1. gerrit上sshkey设置问题

    gerrit里面设置ssh的方法  http://blog.sina.com.cn/s/blog_4d4bc1110101dbxs.html `ssh-keygen -t dsa -b 1024` d ...

  2. Django的FBV和CB

    Django的FBV和CBV FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV C ...

  3. Qt emit的使用

    1. 假设现在我定义了一个类A,现在想在A的一个函数void A::function1()当中的结尾处emit一个信号signal1(),然后利用这个信号触发另一个类B进行某项操作void B::fu ...

  4. AVAudioFoundation(5):音视频导出

    本文转自:AVAudioFoundation(5):音视频导出 | www.samirchen.com 本文主要内容来自 AVFoundation Programming Guide. 要读写音视频数 ...

  5. TED #05# How we can face the future without fear, together

    Rabbi Lord Jonathan Sacks: How we can face the future without fear, together 1. what was it like bei ...

  6. CentOS下 Nginx1.13.5 + PHP7.1.10 + MySQL5.7.19 源码编译安装

    一.安装Nginx ①安装依赖扩展 # yum -y install wget openssl* gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng l ...

  7. 20145311 《Java程序设计》第六周学习总结

    20145311 <Java程序设计>第六周学习总结 教材学习内容总结 第十章(Input&&Output) 10.1InputStream OutputStream 10 ...

  8. ngular6开发不完全笔记(二)-- 管道

    自定义管道 管道(过滤器)为过滤数据显示下列list数据 pip.ts 文件 import { Pipe, PipeTransform } from '@angular/core'; import { ...

  9. CF_321_B_NetFlow

    CF_321_B 题面:据说题目描述是游戏王的规则,然而我并没有玩过.大概意思就是我方有m张攻击牌,敌方有n张牌(防御,攻击都有),如果一回合我方选择攻击牌(X)攻击敌方防守牌(Y)且$Vval_X ...

  10. SDN原理 OpenFlow协议 -3

    问题4:流表匹配 OF1.1版本 这是OF1.1版本的操作,引入了多流表,1.0版本并没有多流表. 多流表的匹配称为 流水线处理:交换机从流表0开始查找,按照流表序号从小到大匹配. 每个包按照优先级去 ...