题目大意

有一个 \(n\times m\) 的方阵,每次有 \((x,y)\) 离开,离开后有两个命令

  1. 向左看齐。这时第一列保持不动,所有学生向左填补空缺。这条指令之后,空位在第 \(x\) 行第 \(m\) 列。
  2. 向前看齐。这时第一行保持不动,所有学生向前填补空缺。这条指令之后,空位在第 \(n\) 行第 \(m\) 列。

最后 \((x,y)\) 回到 \((n,m)\)

现在问每次离队的人的编号。 \((i,j)\) 的编号是 \((i-1)*m+j\)

题解

对每一行前 \(m-1\) 个建 \(n\) 个权值线段树,对第 \(m\) 列单独建。

线段树记录区间离开的个数

因为把一个点加入线段树十分麻烦,考虑用 \(n+1\) 个 \(vector\) 来保存加入的数

接着分类讨论

  1. \(y==m\),就是只有向前看齐。直接在第 \(n+1\) 颗线段树中 \(x\) 的实际位置 \(pos\)

    若 \(pos<=n\) 则没有删除,答案为 \(pos*m\) ,否则在 \(vector\) 中

  2. \(y<m\) ,先向左看齐。在第 \(x\) 颗线段树中查询 \(y\) 的实际位置 \(pos\)

    若 \(y<m\) 则没有删除,否则在 \(vector\) 中。得到答案再向前看齐

    向前看齐加入 \(vector\) 的编号为这里得到的编号

  3. 每次得到答案就把它加入对应的 \(vector\) 中。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n,m,T,pos,maxx,tot,sm[6000000],rt[6000000],ls[6000000],rs[6000000];
vector<LL>del[300005];
int Kth(int k,int l,int r,int rt) {
if(l==r)return l;
register int mid=l+r>>1,tmp=mid-l+1-sm[ls[rt]];
return k<=tmp?Kth(k,l,mid,ls[rt]):Kth(k-tmp,mid+1,r,rs[rt]);
}
void Modify(int p,int l,int r,int &rt) {
if(!rt)rt=++tot; ++sm[rt];
if(l==r)return;
register int mid=l+r>>1;
if(p<=mid)Modify(p,l,mid,ls[rt]);
else Modify(p,mid+1,r,rs[rt]);
}
inline LL Sz(int x,LL y) {
pos=Kth(x,1,maxx,rt[n+1]);
Modify(pos,1,maxx,rt[n+1]);
register LL res;
if(pos<=n)res=1LL*pos*m;
else res=del[n+1][pos-n-1];
del[n+1].push_back(y?y:res);
return res;
}
inline LL Hz(int x,LL y) {
pos=Kth(y,1,maxx,rt[x]);
Modify(pos,1,maxx,rt[x]);
register LL res;
if(pos<m)res=1LL*(x-1)*m+pos;
else res=del[x][pos-m];
del[x].push_back(Sz(x,res));
return res;
}
int main() {
freopen("phalanx.in","r",stdin);
freopen("phalanx.out","w",stdout);
scanf("%d%d%d",&n,&m,&T),maxx=max(n,m)+T;
for(int u,v;T--;) {
scanf("%d%d",&u,&v);
if(v==m)printf("%lld\n",Sz(u,0));
else printf("%lld\n",Hz(u,v));
}
}

【NOIP2017 提高组正式赛】列队 题解的更多相关文章

  1. [jzoj]5478.【NOIP2017提高组正式赛】列队

    Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子.       前段时间,Sylvia 参加了学校 ...

  2. NOIP2017提高组 模拟赛15(总结)

    NOIP2017提高组 模拟赛15(总结) 第一题 讨厌整除的小明 [题目描述] 小明作为一个数学迷,总会出于数字的一些性质喜欢上某个数字,然而当他喜欢数字k的时候,却十分讨厌那些能够整除k而比k小的 ...

  3. NOIP2017提高组 模拟赛13(总结)

    NOIP2017提高组 模拟赛13(总结) 第一题 函数 [题目描述] [输入格式] 三个整数. 1≤t<10^9+7,2≤l≤r≤5*10^6 [输出格式] 一个整数. [输出样例] 2 2 ...

  4. NOIP2017提高组模拟赛 10 (总结)

    NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...

  5. NOIP2017提高组模拟赛 8(总结)

    NOIP2017提高组模拟赛 8(总结) 第一题 路径 在二维坐标平面里有N个整数点,Bessie要访问这N个点.刚开始Bessie在点(0,0)处. 每一步,Bessie可以走到上.下.左.右四个点 ...

  6. NOIP2017提高组模拟赛 9 (总结)

    NOIP2017提高组模拟赛 9 (总结) 第一题 星星 天空中有N(1≤N≤400)颗星,每颗星有一个唯一的坐标(x,y),(1≤x,y ≤N).请计算可以覆盖至少K(1≤K≤N)颗星的矩形的最小面 ...

  7. NOIP2017提高组模拟赛 7(总结)

    NOIP2017提高组模拟赛 7(总结) 第一题 斯诺克 考虑这样一个斯诺克球台,它只有四个袋口,分别在四个角上(如下图所示).我们把所有桌子边界上的整数点作为击球点(除了4个袋口),在每个击球点我们 ...

  8. NOIP2017提高组模拟赛5 (总结)

    NOIP2017提高组模拟赛5 (总结) 第一题 最远 奶牛们想建立一个新的城市.它们想建立一条长度为N (1 <= N <= 1,000,000)的 主线大街,然后建立K条 (2 < ...

  9. NOIP2017提高组模拟赛4 (总结)

    NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...

随机推荐

  1. es5语法下,javascript如何判断函数是new还是()调用

    es5语法没有支持类class,但是可以通关函数来申明一个类,如下: function Person(name){ this.name=name; } var john=new Person('joh ...

  2. jupyter notebook 调用.py文件

    方法1.利用 %run xx.py 直接运行得出结果. 方法2:利用 %load xx.py 载入代码再点击Run运行,这种方法的好处是可以方便修改代码. 说明: Jupyter Notebook中以 ...

  3. crm多对多

    多对多要使用service.Associate传入两表的id和中间表的 service.Associate("invoice", entityReferenceInvoice.Id ...

  4. LC-844

    给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true .# 代表退格字符. 注意:如果对空文本输入退格字符,文本继续为空. 示例 1: 输入:s = &qu ...

  5. 如何在 Java 中实现 Dijkstra 最短路算法

    定义 最短路问题的定义为:设 \(G=(V,E)\) 为连通图,图中各边 \((v_i,v_j)\) 有权 \(l_{ij}\) (\(l_{ij}=\infty\) 表示 \(v_i,v_j\) 间 ...

  6. 注册中心Eureka的简单使用

    不讲原理,只讲简单使用 微服务,一般是父子工程,可以直接在父工程下新建个模块来用来启动Eureka 1.创建Eureka模块 2.引入依赖 <dependency> <groupId ...

  7. Java学习day35(《大道至简》读后感)

    对于大一之前的我来说,并不明白计算机这个专业要做的是什么,在我的眼中敲敲键盘打打字就是这个专业的全部:对于现在的我而言,这样的想法显然是十分幼稚的. 当初高考完填报志愿时选择了这门专业,也并不是因为自 ...

  8. 【直播回顾】OpenHarmony知识赋能第四期直播——标准系统HDF开发

    3月10日晚上19点,OpenHarmony开发者成长计划社群内,我们举办了​​知识赋能第四期直播课<OpenHarmony标准系统HDF框架介绍>​​,吸引了数千名开发者线上观看学习,并 ...

  9. javaWeb代码整理01-mysql

    jar包: maven坐标: <dependency> <groupId>mysql</groupId> <artifactId>mysql-conne ...

  10. AQS源码阅读

    简介 AQS 全程为 AbstractQueuedSynchronizer , 在 java.util.concurrent.locks包下的一个抽象类. 类的具体作用以及设计在开始类描述信息里面就有 ...