原文链接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. java中package指什么

    为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间,类似C#的 namespace的作用,防止名字相同的类产生冲突. Java中的一个package(包)就是一个类库单元,包内包含有一组 ...

  2. 【原创】运维基础之Docker(5)docker部署airflow

    部署方式:docker+airflow+mysql+LocalExecutor 使用airflow的docker镜像 https://hub.docker.com/r/puckel/docker-ai ...

  3. Python-Pool类

    目录: multiprocessing模块 Pool类 apply apply_async map close terminate join 进程实例 multiprocessing模块 如果你打算编 ...

  4. C# 中使用 Excel

    using System;using System.Collections.Generic;using System.Text;using System.Reflection;using System ...

  5. vuforia unity 识别图片出模型

    ARCamera设置: 然后设置ImageTarge

  6. Confluence 6 考虑使用自定义 CSS

    CSS 的知识储备 如果你没有有关 CSS 的相关知识,请参考页面  CSS Resources section 中的内容.当你打算开始对 Confluence 的样式表进行修改之前,你应该对 CSS ...

  7. 【ES】学习10-聚合3

    聚合是在查询匹配的文档中做统计的 不指定查询语句时,从所有文档中匹配. 下面两个语句等价: GET /cars/transactions/_search { , "aggs" : ...

  8. WEB漏洞 XSS(一)

    1.xss的形成原理 xss 中文名是“跨站脚本攻击”,英文名“Cross Site Scripting”.xss也是一种注入攻击,当web应用对用户输入过滤不严格,攻击者写入恶意的脚本代码(HTML ...

  9. javaSocket笔记

    1.查看电脑当前开放链接的端口号 使用netstat命令 netstat -nao 可以查看PID进程号 netstat -nab 获取进程的详细信息 2.类创建的不同对象,引用是不同的.也就是说同一 ...

  10. poj1236 SCC+缩点

    /* 强连通分量内的点可以互相传送,可以直接缩点 缩点后得到一棵树 第一问的答案是零入度点数量, 第二问: 加多少边后变成强连通图 树上入度为0的点有p个,出度为0的点为q,那么答案就是max(p,q ...