题解[NOIP2017] 列队
题解[NOIP2017] 列队
题面
解析
看到这题时感觉这个编号很难维护啊?
后来看了lzf大佬的题解才会..
首先,考虑一个稍微暴力的做法,
维护每一行的前\(m-1\)个人和最后一列的\(n\)个人的编号,
也就是用\(n+1\)个区间分开维护
设当前询问\((x,y)\),
那么就在第\(x\)行中把它删掉,
再把最后一列的对应第\(x\)行的人加入第\(x\)行中,
最后将询问的人加入最后一列.
(当然如果询问的人在最后一列要特判)
但显然这样时间和空间都会炸...
于是考虑优化,
首先意识到只有\(q\)个询问,即每个区间长度最多只会加\(q\)
那么可以考虑对每个区间用一棵类似于权值线段树的结构动态开点,
具体来说,拿一个区间举个例子,
设区间长度为\(l\),
那么我们开一棵区间总长度为\(l+q\)的权值线段树,
其中前\(l\)个是本来就在那里的,后面的是后来加进来的,
显然前\(l\)个的编号就是它本来的编号规则,而后面的可以用一个\(vector\)维护,
这样空间复杂度也就下来了.
每个节点维护一个\(cnt\)表示它代表的区间里有多少个元素被删(出队)了,
那么区间长度-\(cnt\)就是区间里还剩下的人数,
而询问其实也就是找剩下的第\(y\)个人.
和左子树的剩下的人数比大小就行了.
最后还是注意如果询问在最后一列要特判.
code:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#define int long long
#define fre(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
using namespace std;
inline int read(){
int sum=0,f=1;char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
return f*sum;
}
const int N=1000005;
struct tree{int cnt,l,r;}t[N<<2];
int n,m,Q,rt[N],tot;
vector<int> v[N];
inline int dinf(int &p,int l,int r,int x){
if(!p) p=++tot,t[p].cnt=0;
t[p].cnt++;
if(l==r) return l;
int mid=(l+r)>>1;
int cc=mid-l+1-t[t[p].l].cnt;
if(cc>=x) return dinf(t[p].l,l,mid,x);
else return dinf(t[p].r,mid+1,r,x-cc);
}
signed main(){
n=read();m=read();Q=read();
int l1=m-1+Q,l2=n+Q;
while(Q--){
int x=read(),y=read();
if(y<m){
int pos=dinf(rt[x],1,l1,y);
int ans=pos<m? (x-1)*m+pos:v[x][pos-m];
v[n+1].push_back(ans);
int pos1=dinf(rt[n+1],1,l2,x);
int ans1=pos1<=n? pos1*m:v[n+1][pos1-n-1];
v[x].push_back(ans1);
printf("%lld\n",ans);
}
else{
int pos=dinf(rt[n+1],1,l2,x);
int ans=pos<=n? pos*m:v[n+1][pos-n-1];
v[n+1].push_back(ans);
printf("%lld\n",ans);
}
}
return 0;
}
题解[NOIP2017] 列队的更多相关文章
- [NOIP2017]列队 离线+SBT
[NOIP2017]列队 题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n×m名学生,方阵 ...
- 【题解】NOIP2017 提高组 简要题解
[题解]NOIP2017 提高组 简要题解 小凯的疑惑(数论) 不讲 时间复杂度 大力模拟 奶酪 并查集模板题 宝藏 最优解一定存在一种构造方法是按照深度一步步生成所有的联通性. 枚举一个根,随后设\ ...
- 【题解】NOIP2017逛公园(DP)
[题解]NOIP2017逛公园(DP) 第一次交挂了27分...我是不是必将惨败了... 考虑这样一种做法,设\(d_i\)表示从该节点到n节点的最短路径,\(dp(i,k)\)表示从\(i\)节点 ...
- 【NOIP题解】NOIP2017 TG D2T3 列队
列队,NOIP2017 TG D2T3. 树状数组经典题. 题目链接:洛谷. 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. ...
- NOIP2017 列队 题解报告【56行线段树】
题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n \times mn×m名学生,方阵的行数 ...
- NOIP2017列队(phalanx)解题报告
列队作为NOIP2017最后一道题,其实并不难,只是相对于其它题目,有点小小的工业 首先,这道题我用splay维护的,如果你不会splay,又想学一下splay,可以来这里学一学,接下来步入正题 首先 ...
- [NOIP2017]列队 (Splay)
题目链接 NOIP2017真的是不按常理出牌: 1.数学题不在Day2T1 2.一道水题一道细节极多的模拟题一道不知道怎么形容的题(小凯的疑惑)(因为我太菜了) 3.3道大火题 当时看到列队这题是毫无 ...
- <noip2017>列队
题解: 考场实际得分:45 重新看了一下,发现至少80分是很好拿的 对于前30% 暴力 另20% 显然离线搞一下就可以了(大概当初连离线是啥都不知道) 另另30%其实只要维护第一行和最后一列就可以了, ...
- Luogu 3960 [NOIP2017] 列队 - splay|线段树
题解 是我从来没有做过的裂点splay... 看的时候还是很懵逼的QAQ. 把最后一列的$n$个数放在一个平衡树中, 有 $n$ 个点 剩下的$n$行数, 每行都开一个平衡树,开始时每棵树中仅有$1$ ...
随机推荐
- 《Mysql - 字符串索引应该如何建立?》
一:概述 - 我有一个需求是需要邮箱登录的, - mysql> select f1, f2 from SUser where email='xxx'; - 我们知道,如果不在 email 上建立 ...
- 5年经验Java程序员面试20天
写在前面 今天分享的是一位5年工作经验的Java工程师在帝都的面试经验总结,看看这些互联网公司都爱问些什么题,希望对大家的面试有指导意义. 从事Java开发也有5年经验了,4月初自己的开启面试经历 ...
- 多文件上传,添加重复文件时无法触发onchange事件。
<input type="file" id="upload" @change="getFile($event)" multiple=& ...
- java--demo之猜拳游戏
版本1:人机大战 基础随机出 用户键盘录入 package com.hainiu.demo; import java.util.Scanner; /* * 人机大战石头剪刀布 */ publi ...
- PAT(B) 1018 锤子剪刀布(C:20分,Java:18分)
题目链接:1018 锤子剪刀布 分析 用一个二维数组保存两人所有回合的手势 甲乙的胜,平,负的次数刚好相反,用3个变量表示就可以 手势单独保存在signs[3]中,注意顺序.题目原文:如果解不唯一,则 ...
- Centos 安装 graylog
安装文档 安装nginx做反向代理 (如果生产环境通过端口管理则用不到) 通过yum安装方便以后升级 yum install nginx chkconfig nginx on service ngin ...
- 2019杭电多校一 K. Function (数论)
大意: 给定$n(n\le 10^{21})$, 求$\sum\limits_{i=1}^n gcd(\lfloor\sqrt[3]{i}\rfloor,i)\mod 998244353$ 首先立方根 ...
- (三)Activiti之第一个程序以及Activiti插件的使用和Activiti表的解释
一.案例 1.1 建立Activiti Diagram图 new -> activiti ->Activiti Diagram,创建一个HelloWorld文件,后缀自动为bpmn,如下图 ...
- opencv-02--图像的邻域操作
图像的邻域操作 很多时候,我们对图像处理时,要考虑它的邻域,比如3*3是我们常用的,这在图像滤波.去噪中最为常见,下面我们介绍如果在一次图像遍历过程中进行邻域的运算. 下面我们进行一个简单的滤波操作, ...
- java 框架-消息队列ActiveMQ
https://www.jianshu.com/p/ecdc6eab554c ActiveMQ从入门到精通(一) 22017.03.11 21:40:42字数 2650阅读 57286 这是关于消息中 ...