洛谷 P3960 [ NOIP 2017 ] 列队 —— 线段树
题目:https://www.luogu.org/problemnew/show/P3960
NOIP 题,不用很复杂的数据结构...但又参考了许多;
要求支持维护删除第 k 个和在末尾插入的数据结构,线段树就很好;
所以每行一个线段树维护前 m-1 个元素,最后一列一个线段树即可;
但 n+1 个线段树显然空间太大,考虑利用一开始是按顺序排列的特点;
也就是不用实际开出来所有线段树的点,只要它是满的就可以直接算出来;
对于新加入线段树的点,如果真的加入线段树里,又不会算空间了...
但是新加入的点只有 2*q 个,可以给每行和最后一列开一个 vector 记录新加入的点,查询时如果不是原装点,就去 vector 里提取;
也不需要去 vector 里删除元素,在对应线段树上动态开出这个点的位置表示一下就行了,将来查询的时候就不会算这个元素;
把基础数据结构组合起来,得到简洁的做法...希望下次能自己想出来。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define mid ((l+r)>>1)
using namespace std;
typedef long long ll;
int const maxn=3e5+,maxm=;
int n,m,q,rt[maxn],cnt,sum[maxm],ls[maxm],rs[maxm],mx;
vector<ll>v[maxn];//ll
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<='')ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return ret*f;
}
int query(int x,int l,int r,int k)
{
if(l==r)return l; int num=(mid-l+)-sum[ls[x]];
if(num>=k)return query(ls[x],l,mid,k);
return query(rs[x],mid+,r,k-num);
}
void update(int &x,int l,int r,int pos)
{
if(!x)x=++cnt; sum[x]++;//sum 是删除的数量
if(l==r)return;//
if(pos<=mid)update(ls[x],l,mid,pos);
else update(rs[x],mid+,r,pos);
}
ll del(int x,int y)
{
int pos=query(rt[x],,mx,y);
update(rt[x],,mx,pos);
if(pos<m)return (ll)(x-)*m+pos;
return v[x][pos-m];
}
ll del2(int x)
{
int pos=query(rt[n+],,mx,x);
update(rt[n+],,mx,pos);
if(pos<=n)return (ll)pos*m;
return v[n+][pos-n-];
}
int main()
{
n=rd(); m=rd(); q=rd();
mx=max(n,m)+q;
for(int i=,x,y;i<=q;i++)
{
x=rd(); y=rd();
if(y==m)
{
ll tmp=del2(x);
printf("%lld\n",tmp);
v[n+].push_back(tmp);
}
else
{
ll tmp=del(x,y);
printf("%lld\n",tmp);
v[n+].push_back(tmp);
ll tmp2=del2(x);
v[x].push_back(tmp2);
}
}
return ;
}
洛谷 P3960 [ NOIP 2017 ] 列队 —— 线段树的更多相关文章
- 洛谷 P3373 【模板】线段树 2
洛谷 P3373 [模板]线段树 2 洛谷传送门 题目描述 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上 xx 将某区间每一个数加上 xx 求出某区间每一个数的和 输入格式 第一 ...
- 洛谷 P3951 NOIP 2017 小凯的疑惑
洛谷 P3951 NOIP 2017 小凯的疑惑 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付 ...
- 洛谷P3372 【模板】线段树 1
P3372 [模板]线段树 1 153通过 525提交 题目提供者HansBug 标签 难度普及+/提高 提交 讨论 题解 最新讨论 [模板]线段树1(AAAAAAAAA- [模板]线段树1 洛谷 ...
- 洛谷P4891 序列(势能线段树)
洛谷题目传送门 闲话 考场上一眼看出这是个毒瘤线段树准备杠题,发现实在太难调了,被各路神犇虐哭qwq 考后看到各种优雅的暴力AC......宝宝心里苦qwq 思路分析 题面里面是一堆乱七八糟的限制和性 ...
- 洛谷 P2574 XOR的艺术(线段树 区间异或 区间求和)
To 洛谷.2574 XOR的艺术 题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的 ...
- 洛谷P4344 脑洞治疗仪 [SHOI2015] 线段树+二分答案/分块
!!!一道巨恶心的数据结构题,做完当场爆炸:) 首先,如果你用位运算的时候不小心<<打成>>了,你就可以像我一样陷入疯狂的死循环改半个小时 然后,如果你改出来之后忘记把陷入死循 ...
- Bzoj5294/洛谷P4428 [Bjoi2018]二进制(线段树)
题面 Bzoj 洛谷 题解 考虑一个什么样的区间满足重组之后可以变成\(3\)的倍数.不妨设\(tot\)为一个区间内\(1\)的个数.如果\(tot\)是个偶数,则这个区间一定是\(3\)的倍数,接 ...
- 【题解】洛谷P1198 [JSOI2008] 最大数(线段树)
洛谷P1198:https://www.luogu.org/problemnew/show/P1198 思路 一道水水的线段树 20分钟A掉 这道题只涉及到单点修改和区间查询 所以这道题甚至不用Laz ...
- bzoj3064/洛谷P4314 CPU监控【线段树】
好,长草博客被催更了[?] 我感觉这题完全可以当作线段树3 线段树2考加法和乘法标记的下放顺序,这道题更丧心病狂[?] 很多人可能跟我一样,刚看到这道题秒出思路:打一个当前最大值一个历史最大值不就完事 ...
随机推荐
- stark组件之删除页面内容搭建(八)
删除页面没有太多的内容和功能 def del_view(self, request,pk,*args,**kwargs): """ 处理删除表弟 :param reque ...
- stark组件之处理函数动态url构造(五)
在这个组件中有内置的4个处理函数,它们都有自己对应的url,那么它们的url是怎么构造的呢? ... urlpatterns = [ re_path('list/$', self.wrapper(se ...
- java 反射---学习笔记
一.java的动态性 反射机制 动态编译 动态执行JavaScript代码 动态字节码操作 二.动态语言 动态语言 程序运行时,可以改变程序结构或变量类型,典型的语言:python.ruby.java ...
- STM32F407 GPIO原理 个人笔记
datasheet(STM32F407ZGT6.pdf)中,IO structure 为FT,表示容忍5V电压 后面的uart1_TX之类,表示端口复用 共有A~G7组IO口, 每组16个IO口:0~ ...
- java连接mysql数据库中文乱码问题
private static final String URL="jdbc:mysql://localhost:3306/ziye?useUnicode=true&character ...
- idea使用之maven中央仓库索引更新
接着上篇,上篇是更新本地已有的索引,这样在编写pom文件的时候,可以自动提示,但如果我们能够把整个中央仓库的索引更新下来,那不是更方便啦. 打开settings-->Build,Executio ...
- Linux下汇编语言学习笔记33 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Pagodas 等差数列
nn pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain, ...
- [bzoj5343][Ctsc2018]混合果汁_二分答案_主席树
混合果汁 bzoj-5343 Ctsc-2018 题目大意:给定$n$中果汁,第$i$种果汁的美味度为$d_i$,每升价格为$p_i$,每次最多添加$l_i$升.现在要求用这$n$中果汁调配出$m$杯 ...
- openstack setup demo Enviroment
Enviroment 本文包含以下部分. Host networking Network Time Protocol (NTP) OpenStack packages SQL database NoS ...