原文链接https://www.cnblogs.com/zhouzhendong/p/9265380.html

题目传送门 - 洛谷P3960

题目传送门 - LOJ#2319

题目传送门 - Vijos P2033

题意

  懒了,不概括了。

  

  

题解

  一开始写了树状数组。

  算法非常真,写完全部 WA,但是漏了一步,我快写吐了,于是弃疗之后从某度*了一份代码。

  我来说说线段树的做法:

  线段树动态开点,每行一个线段树,最后一列一个线段树。

  线段树要支持找区间第 $k$ 大,这样方便找出指定位置。

  注意一下我们会在行或者列线段树新增最多 $q$ 个元素,所以线段树处理的区间要开到 $\max(n,m)+q$ 。

  然后就是纯模拟了。注意,无论是在行尾加入新元素,还是在最后一列尾加入新元素,我们都需要记录他们的值,用 $vector$ 存一下。

  注意开 $long\ long$ 。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=300005,S=N*20;
int n,m,q,Max,tot;
int root[N],ls[S],rs[S],sum[S];
vector <LL> v[N];
int query(int rt,int L,int R,int x){
if (L==R)
return L;
int mid=(L+R)>>1,tmp=mid-L+1-sum[ls[rt]];
if (x<=tmp)
return query(ls[rt],L,mid,x);
else
return query(rs[rt],mid+1,R,x-tmp);
}
void change(int &rt,int L,int R,int x){
if (!rt)
rt=++tot;
sum[rt]++;
if (L==R)
return;
int mid=(L+R)>>1;
if (x<=mid)
change(ls[rt],L,mid,x);
else
change(rs[rt],mid+1,R,x);
}
LL solve1(int x,LL y){
int pos=query(root[0],1,Max,x);
change(root[0],1,Max,pos);
LL ans=pos<=n?1LL*pos*m:v[0][pos-n-1];
v[0].push_back(y?y:ans);
return ans;
}
LL solve2(int x,int y){
int pos=query(root[x],1,Max,y);
change(root[x],1,Max,pos);
LL ans=pos<m?1LL*(x-1)*m+pos:v[x][pos-m];
v[x].push_back(solve1(x,ans));
return ans;
}
int main(){
scanf("%d%d%d",&n,&m,&q);
Max=max(n,m)+q;
while (q--){
int x,y;
scanf("%d%d",&x,&y);
printf("%lld\n",y==m?solve1(x,0):solve2(x,y));
}
}

  

  

NOIP2017提高组Day2T3 列队 洛谷P3960 线段树的更多相关文章

  1. NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp

    原文链接https://www.cnblogs.com/zhouzhendong/p/9261079.html 题目传送门 - 洛谷P3959 题目传送门 - Vijos P2032 题意 给定一个 ...

  2. [NOIP2013 提高组] 华容道 P1979 洛谷

    [NOIP2013 提高组] 华容道 P1979 洛谷 强烈推荐,更好的阅读体验 经典题目:spfa+bfs+转化 题目大意: 给出一个01网格图,和点坐标x,y空格坐标a,b,目标位置tx,ty要求 ...

  3. 洛谷P3372线段树1

    难以平复鸡冻的心情,虽然可能在大佬眼里这是水题,但对蒟蒻的我来说这是个巨大的突破(谢谢我最亲爱的lp陪我写完,给我力量).网上关于线段树的题解都很玄学,包括李煜东的<算法竞赛进阶指南>中的 ...

  4. NOIP 2016 提高组 复赛 Day2T1==洛谷2822 组合数问题

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...

  5. NOIP2018&2013提高组T1暨洛谷P5019 铺设道路

    题目链接:https://www.luogu.org/problemnew/show/P5019 花絮:普及蒟蒻终于A了一道提高的题目?emm,写一篇题解纪念一下吧.求过! 分析: 这道题我们可以采用 ...

  6. 洛谷 P3372 线段树1

    这是一道模板题 线段树介绍https://www.cnblogs.com/nvwang123/p/10420832.html #include<bits/stdc++.h> using n ...

  7. 洛谷P3373线段树模板2

    题目:https://www.luogu.org/problemnew/show/P3373 带乘的线段树,更新时把加的标记也乘一下,然后取值时先乘后加. 代码如下: #include<iost ...

  8. 洛谷P3372线段树模板1——线段树

    题目:https://www.luogu.org/problemnew/show/P3372 线段树模板. 代码如下: #include<iostream> #include<cst ...

  9. 洛谷P3373 线段树2(补上注释了)

    毒瘤题.找了一下午+晚上的BUG,才发现原来query_tree写的是a%p; 真的是一个教训 UPD:2019.6.18 #include<iostream> #include<c ...

随机推荐

  1. linux shell 数组建立及使用技巧

    参考网址:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html linux shell在编程方面比windows 批处理强大太多 ...

  2. mysql-约束介绍

    一.约束介绍 约束是一种限制,它通过对表的行或列的数据做出限制,来确保数据的完整性.一致性.约束条件与数据类型宽度一样都是可选参数. 常用约束: PRIMARY KEY (PK) 标识该字段为该表的主 ...

  3. 搭建 RabbitMQ Server 高可用集群【转】

    阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 ...

  4. poj1564 Sum It Up dfs水题

    题目描述: Description Given a specified total t and a list of n integers, find all distinct sums using n ...

  5. vue入手

    https://www.jianshu.com/p/dc5057e7ad0d    (最全入坑教程) http://doc.liangxinghua.com/vue-family/1.4.html(v ...

  6. swift 学习- 20 -- 错误处理

    // 错误处理 是响应错误以及 从错误中恢复的过程, Swift 提供了在运行时对 可恢复错误的 抛出, 捕获, 传递 和 操作的支持 // 某些操作无法保证总是执行完所有代码 或总是生层有用结果, ...

  7. Java、Apache Tomcat下载与安装及环境变量配置

    1.Java JDK 与 Apache Tomcat 下载 JDK 下载 Apache Tomcat 下载 2.安装与环境变量配置 关于 JDK 的安装挺简单的,网上教程也挺多,Tomcat 下载免安 ...

  8. 解决Navicat连接MySQL总是报错1251的方法

    今天下了个 MySQL8.0,发现Navicat连接不上,总是报错1251: 原因是MySQL8.0版本的加密方式和MySQL5.0的不一样,连接会报错. 试了很多种方法,终于找到一种可以实现的: 更 ...

  9. python之线程同步

    lock与rlock 使用lock不能连续两次获取锁,获取锁必须先释放锁.但是在一个线程中调用另一个函数时,在该函数中要继续操作共享的数据,这时获取锁就相当于连续执行两次获取锁,所以lock就不适用该 ...

  10. 【深度学习】吴恩达网易公开课练习(class1 week4)

    概要 class1 week3的任务是实现单隐层的神经网络代码,而本次任务是实现有L层的多层深度全连接神经网络.关键点跟class3的基本相同,算清各个参数的维度即可. 关键变量: m: 训练样本数量 ...