[NOIP2017 提高组] 列队
考虑我们需要维护的是这样一个东西。
即可能变化的只有每一行前\(m - 1\)个,和最后一列。
我们考虑对每一行开一个权值线段树,记录原本序列的第\(x\)个是否被一出,且用一个\(vector\)记录多出的部分。
那么很好维护的。
考虑内存的问题,我们用动态开点就行了。
#include<iostream>
#include<cstdio>
#include<vector>
#define ll long long
#define N 300005
ll root[N];
struct P{
ll l,r,v;
}e[N << 4];
std::vector<ll>QWQ[N + 1];
ll n,m,q,lim;
#define mid ((l + r) >> 1)
#define ls(x) e[x].l
#define rs(x) e[x].r
inline ll qi(ll u,int l,int r,int p){
if(l == r){
return l;
}
ll tmp = mid - l + 1 - e[ls(u)].v;
if(p <= tmp)
return qi(ls(u),l,mid,p);
else
return qi(rs(u),mid + 1,r,p - tmp);
}
ll cnt;
inline void change(ll &u,int l,int r,int p){
if(!u)u = ++cnt;
e[u].v ++ ;
if(l == r)
return ;
if(p <= mid)
change(ls(u),l,mid,p);
else
change(rs(u),mid + 1,r,p);
}
inline ll del1(int x,ll y){
ll pos = qi(root[n + 1],1,lim,x);
change(root[n + 1],1,lim,pos);
ll ans = pos <= n ? 1ll * pos * m : QWQ[n + 1][pos - n - 1];
return QWQ[n + 1].push_back(y ? y : ans),ans;
}
inline ll del2(int x,int y){
ll pos = qi(root[x],1,lim,y);
change(root[x],1,lim,pos);
ll ans = pos < m ? 1ll * (x - 1) * m + pos : QWQ[x][pos - m];
return QWQ[x].push_back(del1(x,ans)),ans;
}
int main(){
scanf("%lld%lld%lld",&n,&m,&q);
lim = std::max(n,m) + q;
while(q -- ){
ll x,y;
scanf("%lld%lld",&x,&y);
if(y == m)
std::cout<<del1(x,0)<<std::endl;
else
std::cout<<del2(x,y)<<std::endl;
}
}
[NOIP2017 提高组] 列队的更多相关文章
- [NOIp2017提高组]列队
[NOIp2017提高组]列队 题目大意 一个\(n\times m(n,m\le3\times10^5)\)的方阵,每个格子里的人都有一个编号.初始时第\(i\)行第\(j\)列的编号为\((i-1 ...
- 【题解】NOIP2017 提高组 简要题解
[题解]NOIP2017 提高组 简要题解 小凯的疑惑(数论) 不讲 时间复杂度 大力模拟 奶酪 并查集模板题 宝藏 最优解一定存在一种构造方法是按照深度一步步生成所有的联通性. 枚举一个根,随后设\ ...
- JZOJ 5196. 【NOIP2017提高组模拟7.3】B
5196. [NOIP2017提高组模拟7.3]B Time Limits: 1000 ms Memory Limits: 262144 KB Detailed Limits Goto Pro ...
- JZOJ 5197. 【NOIP2017提高组模拟7.3】C
5197. [NOIP2017提高组模拟7.3]C Time Limits: 1000 ms Memory Limits: 262144 KB Detailed Limits Goto Pro ...
- JZOJ 5195. 【NOIP2017提高组模拟7.3】A
5195. [NOIP2017提高组模拟7.3]A Time Limits: 1000 ms Memory Limits: 262144 KB Detailed Limits Goto Pro ...
- JZOJ 5184. 【NOIP2017提高组模拟6.29】Gift
5184. [NOIP2017提高组模拟6.29]Gift (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Detailed ...
- JZOJ 5185. 【NOIP2017提高组模拟6.30】tty's sequence
5185. [NOIP2017提高组模拟6.30]tty's sequence (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB ...
- NOIP2017提高组 模拟赛15(总结)
NOIP2017提高组 模拟赛15(总结) 第一题 讨厌整除的小明 [题目描述] 小明作为一个数学迷,总会出于数字的一些性质喜欢上某个数字,然而当他喜欢数字k的时候,却十分讨厌那些能够整除k而比k小的 ...
- NOIP2017提高组 模拟赛13(总结)
NOIP2017提高组 模拟赛13(总结) 第一题 函数 [题目描述] [输入格式] 三个整数. 1≤t<10^9+7,2≤l≤r≤5*10^6 [输出格式] 一个整数. [输出样例] 2 2 ...
随机推荐
- Vue3学习(七)之 列表界面数据展示
一.前言 昨晚可能是因为更新完文章后,导致过于兴奋睡不着(写代码确实太容易让人兴奋了),结果两点多才睡着,大东北果然还是太冷了. 不知道是不是因为膝盖和脚都是冰凉的,所以才导致很晚才能入睡? 刚眯了一 ...
- 灵光一闪!帮你使用Vue,搞定无法解决的“动态挂载”
在一些特殊场景下,使用组件的时机无法确定,或者无法在Vue的template中确定要我们要使用的组件,这时就需要动态的挂载组件,或者使用运行时编译动态创建组件并挂载. 今天我们将带大家从实际项目出发, ...
- Java中的函数式编程(八)流Stream并行编程
写在前面 在本系列文章的第一篇,我们提到了函数式编程的优点之一是"易于并发编程". Java作为一个多线程的语言,它通过 Stream 来提供了并发编程的便利性. 题外话: 严格来 ...
- [对对子队]会议记录4.21(Scrum Meeting12)
今天已完成的工作 吴昭邦 工作内容:基本实现改变顺序合成 相关issue:实现流水线合成系统的逻辑 相关签入:4.21签入1 梁河览 工作内容:修改设置界面bug 相关签入:4.2 ...
- 使用logstash的input file filter收集日志文件
使用logstash的input file filter收集日志文件 一.需求 二.实现步骤 1.前置知识 2.编写pipeline文件 3.Input 中 file 插件的部分参数解释: 4.启动l ...
- 如何洗白xi校长?(初稿)
看看咱们太子殿下,谁还敢黑全世界最好的太子殿下 我们不如来考虑一下如何给校长洗白. 第一当然是买断热搜了.买断热搜可以阻止消息进一步传播.当然这种操作学校再8月18日晚就已经做过了.8月18日该条消息 ...
- HZOI帝国2019欢乐时刻
前言: update 只是恢复一下原来手残删掉的博客,不是在水,嘤嘤嘤 update 以后改成Stack,但是之前的就懒得改了... by 10.31 为了窝的访问量大家的好心情,模仿学长搞了一个这个 ...
- C/C++如何传递二维数组?
用二维数组作为参数传递(用二维数组处理矩阵),但是希望接受传递二维数组参数的函数可以处理任意维度的数组(希望矩阵的行数和列数都是不固定的). ----------------------------- ...
- poj 2960 S-Nim (SG)
题意: K个数,s1...sk. m个状态,对于某一个状态,有L堆石子,每人每次取的石子个数只能是s1...sk的一个,且只能在一堆中取. 输出m个状态是先手胜还是先手败,先手胜输出W,否则输出L. ...
- stop services in init
echo 'manual' | sudo tee /etc/init/mysql.override # command from root shellecho manual >> /etc ...