https://www.luogu.org/problemnew/show/P3960

如果 x = 1,相当于维护一条链,每次取出第 k 个数放在序列末尾
假设有 n + m + q 个位置,每个位置有数为 1 ,没有数为 0,
取出后不前移,那么第 k 个数就是第 k 个 1 的位置
初始时 1 ~ n + m - 1 为 1,其他位置为 0,
用线段树维护区间和即可
类似对于这道题把每行看做一条链,最后一列看做一条链
一次操作可以看成对两条链的操作
套用上面的方法即可
注意要动态开点

#include <bits/stdc++.h>

using namespace std;
const int N = 3e5 + ; int n, m, Q, N_;
int size[N * ], lson[N * ], rson[N * ];
int root[N], jdjs;
int ins[N];
int now_root; #define LL long long LL val[N * ];
LL Ans1; #define gc getchar() inline int read() {
int x = ; char c = gc;
while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc;
return x;
} int Calc_size(int l, int r) {
if(now_root != n + ) {
if(r <= m - ) return r - l + ;
else {
if(l <= m - ) return (m - ) - l + ;
else return ;
}
} else {
if(r <= n) return r - l + ;
else {
if(l <= n) return n - l + ;
else return ;
}
} } void Sec_A(int l, int r, int & jd, int x) {
if(!jd) {
jd = ++ jdjs;
size[jd] = Calc_size(l, r);
if(l == r) {
if(now_root <= n) val[jd] = (LL) 1ll * (now_root - ) * m + l;
else val[jd] = (LL) 1ll * l * m;
}
}
size[jd] --;
if(l == r) {Ans1 = val[jd]; return ;}
int mid = (l + r) >> ;
if((!lson[jd] && x <= mid - l + ) || x <= size[lson[jd]]) Sec_A(l, mid, lson[jd], x);
else {
if(!lson[jd]) x -= (mid - l + );
else x -= size[lson[jd]];
Sec_A(mid + , r, rson[jd], x);
}
} void Ins(int l, int r, int & jd, int whe, LL Num) {
if(!jd) {
jd = ++ jdjs;
size[jd] = Calc_size(l, r);
if(l == r) val[jd] = Num;
}
size[jd] ++;
if(l == r) return ;
int mid = (l + r) >> ;
if(whe <= mid) Ins(l, mid, lson[jd], whe, Num);
else Ins(mid + , r, rson[jd], whe, Num);
} int main() {
n = read(), m = read(), Q = read();
N_ = max(n, m) + Q;
while(Q --) {
int x = read(), y = read();
if(y == m) now_root = n + , Sec_A(, N_, root[now_root],x);
else now_root = x, Sec_A(, N_, root[now_root], y);
cout << Ans1 << endl;
now_root = n + ; Ins(, N_, root[n + ], n + (++ ins[n + ]), Ans1);
if(y != m) {
now_root = n + ; Sec_A(, N_, root[now_root], x);
now_root = x; Ins(, N_, root[x], m - + (++ ins[x]), Ans1);
}
}
return ;
}

[Luogu] 列队的更多相关文章

  1. [LUOGU] [NOIP2017] P3960 列队

    题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n \times mn×m 名学生,方阵的行 ...

  2. luogu 3960 列队

    noip2017 D2T3 列队 某zz选手当时直接放弃了写了50还写错了 题目大意: 有一个n行m列的方阵,第i行j列的点编号为(i-1)m+j 每次把第x行y列的点拿出来,然后把这一行它之后的点都 ...

  3. Luogu P3960 列队(动态开点线段树)

    P3960 列队 题意 题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有\(n \times m ...

  4. luogu P3960 列队

    传送门 因为\(Splay\)可以\(O(logn)\)维护区间,所以直接对每一行维护第一个元素到倒数第二个元素的\(Splay\),最后一列维护一个\(Splay\),每次把选出来的点删掉,然后把那 ...

  5. Luogu 3960 [NOIP2017] 列队 - splay|线段树

    题解 是我从来没有做过的裂点splay... 看的时候还是很懵逼的QAQ. 把最后一列的$n$个数放在一个平衡树中, 有 $n$ 个点 剩下的$n$行数, 每行都开一个平衡树,开始时每棵树中仅有$1$ ...

  6. Luogu P3960 列队 线段树

    题面 线段树入门题. 我们考虑线段树来维护这个矩阵. 首先我们先定n+1棵线段树前n棵维护每行前m-1个同学中没有离队过的同学,还有一棵维护第m列中没有离队过的同学.再定n+1棵线段树前n棵线段树维护 ...

  7. LUOGU P3960 列队 (noip2017 day2T3)

    传送门 解题思路 记得当时考试我还是个孩子,啥也不会QAQ.现在回头写,用动态开点的线段树,在每行和最后一列开线段树,然后对于每次询问,把x行y列的删去,然后再把x行m列的元素加入x行这个线段树,然后 ...

  8. [luogu P3960] [noip2017 d2t3] 队列

    [luogu P3960] [noip2017 d2t3] 队列 题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Syl ...

  9. Luogu 魔法学院杯-第二弹(萌新的第一法blog)

    虽然有点久远  还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题  沉迷游戏,伤感情 #include <queue> ...

随机推荐

  1. macos catalina安装python3

    之前跟着教程用brow安装了python3,后来发现电脑上有三个版本的python,头大. 于是用brew uninstall --force python3卸掉了python3 看到现在有两个版本 ...

  2. 【Trie】Phone List

    [题目链接]: https://loj.ac/problem/10049 [题意] 问是否存在一组公共前缀.如果存在输出“NO”,否则输出“YES” [题解] 首先建出Trie树来,然后开始记录所有的 ...

  3. 【hash】Seek the Name, Seek the Fame

    [哈希和哈希表]Seek the Name, Seek the Fame 题目描述 The little cat is so famous, that many couples tramp over ...

  4. Python 常用外部模块详解

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  5. Java日志规范(转载)

    Overview 一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神.程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的.本文想讨论的是 ...

  6. vscode 显示 Module 'turtle' has no … member

    初次运行与 turtle 相关的 Python 代码时,vscode 上显示 Module 'turtle' has no - member. 这时,我们可以在 vscode 的设置里添加如下代码: ...

  7. mycat sql timeout 问题解决

    发现程序中有个批量update语句需要update 16000多条数据导致超时 2019-11-06 10:35:28.312 pool-9-thread-24 ERROR com.hp.nova.c ...

  8. 10.自定义EL函数和自定义标签

    需要在JSP页面中进行一些常见逻辑操作(如对字符串进行操作),首先考虑是否可以用到sun公司提供的EL函数库(fn.tld)和JSTL 核心标签库 如果sun公司的EL函数库没有或者无法满足,就需要自 ...

  9. 运行时异常与受检异常有何异同、error和exception有什么区别

    1.运行时异常与受检异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生.受检异常跟程序 ...

  10. element之input输入搜索联想框

    1. 模板代码 <el-autocomplete :minlength="2" v-model="searchName" :fetch-suggestio ...