传送门


分析

fake:此题不就是链表模拟题吗,我一开始还真这么想

貌似链表什么用都没有,根据题意很清楚,要找一个支持删除和查询区间第\(k\)大的数据结构

解释一下为什么题目可以转换为查询区间第\(k\)大,

如果记录一下上一次删除的位置(这里指的是排名)和总牌数,是不是可以从\(上一次删除位置+kth\)对总牌数取模以重新找到下一次查询的排名,这样周而复始

那这个数据结构要找什么呢平衡树

平衡树当然可以,但是我目前只敲过模板,所以还是算了

也可以用线段树,维护区间未被删除的数的个数,查询第\(k\)大时,如果左区间未被删除的数的个数不小于在当前区间的排名,那么往左边走,否则往右边走

时间复杂度是\(O(n \log n)\)。(当然可以用树状数组+倍增解决,时间复杂度相同)

然而跑得比多带一个log的树状数组+二分还要慢


代码

#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
int w[2800011],n;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline void build(int k,int l,int r){
if (l==r) {w[k]=1; return;}
rr int mid=(l+r)>>1;
build(k<<1,l,mid),build(k<<1|1,mid+1,r);
w[k]=w[k<<1]+w[k<<1|1];
}
inline void update(int k,int l,int r,int x){
if (l==r) {w[k]=0; return;}
rr int mid=(l+r)>>1;
if (x<=mid) update(k<<1,l,mid,x);
else update(k<<1|1,mid+1,r,x);
w[k]=w[k<<1]+w[k<<1|1];
}
inline signed kth(int k,int l,int r,int x){
if (l==r) return l;
rr int mid=(l+r)>>1;
if (w[k<<1]>=x) return kth(k<<1,l,mid,x);
else return kth(k<<1|1,mid+1,r,x-w[k<<1]);
}
signed main(){
n=iut(),build(1,1,n);
for (rr int i=1,now=1;i<=n;++i,putchar(10)){
rr int t=(iut()+now)%w[1],del; if (!t) t=w[1];
print(del=kth(1,1,n,now=t)),update(1,1,n,del);
}
return 0;
}

#线段树#洛谷 3988 [SHOI2013]发牌的更多相关文章

  1. BZOJ 4415 洛谷 3988 [Shoi2013]发牌

    [题解] 权值线段树.查询当前牌堆顶的牌并且删掉就好了. #include<cstdio> #include<algorithm> #define N 3000010 #def ...

  2. 线段树 洛谷P3932 浮游大陆的68号岛

    P3932 浮游大陆的68号岛 题目描述 妖精仓库里生活着黄金妖精们,她们过着快乐,却随时准备着迎接死亡的生活. 换用更高尚的说法,是随时准备着为这个无药可救的世界献身. 然而孩子们的生活却总是无忧无 ...

  3. [线段树]洛谷P5278 算术天才⑨与等差数列

    题目描述 算术天才⑨非常喜欢和等差数列玩耍. 有一天,他给了你一个长度为n的序列,其中第i个数为a[i]. 他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k ...

  4. 区间连续长度的线段树——洛谷P2894 [USACO08FEB]酒店Hotel

    https://www.luogu.org/problem/P2894 #include<cstdio> #include<iostream> using namespace ...

  5. 洛谷 P3998 [SHOI2013]发微博

    洛谷 P3998 [SHOI2013]发微博 洛谷传送门 题目描述 刚开通的 SH 微博共有n个用户(1Ln标号),在这短短一个月的时间内, 用户们活动频繁,共有m 条按时间顺序的记录: ! x 表示 ...

  6. AC日记——校门外的树 洛谷 P1047

    题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种 ...

  7. 带修主席树 洛谷2617 支持单点更新以及区间kth大查询

    题目链接:https://www.luogu.com.cn/problem/P2617 参考博客:https://blog.csdn.net/dreaming__ldx/article/details ...

  8. 洛谷 P3989 [SHOI2013]阶乘字符串 解题报告

    P3989 [SHOI2013]阶乘字符串 题目描述 给定一个由前\(n(\le 26)\)个小写字母组成的串\(S(|S|\le 450)\).串\(S\)是阶乘字符串当且仅当前 \(n\) 个小写 ...

  9. 洛谷 P3990 [SHOI2013]超级跳马 解题报告

    P3990 [SHOI2013]超级跳马 题目描述 现有一个\(n\) 行 \(m\) 列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘. ...

  10. [bzoj4417] [洛谷P3990] [Shoi2013] 超级跳马

    Description 现有一个n行m列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘.例如,当n = 3, m = 10时,下图是一种可 ...

随机推荐

  1. 发送HTML模板邮件

    概述 为了增强邮件内容展示的样式,可以将普通的文本邮件转换为HTML内容格式. 在Java中,可以通过页面模板技术来实现.具体来说,可以使用Thymeleaf模板. 具体实现 首先,在项目中引入Thy ...

  2. CoaXPress 2.0 FPGA 4 Channel Host and Device FMC Card User Manual

    Hello-FPGA CoaXPress 2.0 FMC Card User Manual 4 1 CoaXPress 简介 4 2 CoaXPress 4R FMC 5 2.1 硬件特性 5 2.2 ...

  3. 图数据库|Nebula Graph v3.1.0 性能报告

    本文首发于 Nebula Graph Community 公众号 本文系 Nebula Graph 发行版 v3.1.0 的性能测试报告. 本文目录 测试环境 测试数据 关于 LDBC-SNB 测试说 ...

  4. SSH原理与实践(三)安装和使用

    主页 个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/ 引言 在之前SSH原理与实践系列文章中,我们主要讲解了SSH协议的原理 ...

  5. vscode 尾逗号不自动删除 'comma-dangle': 'off' eslint vue

    vscode 尾逗号不自动删除 'comma-dangle': 'off' eslint 外层环境说明 vscode eslint - .elintrs.js vue - vue开发 vetur - ...

  6. nrm 安装报错 解决方案

    想用 npm login 发现用的淘宝镜像,一看安装个nrm,结果运行还报错了.你看看. 改下,登录完再改回来. https://blog.csdn.net/mynewdays/article/det ...

  7. 【mac】Alfred 无法调用Terminal

    原因:是从mac app商店安装的Alfred class 解决方案:建议从官网下载安装:https://www.alfredapp.com/ 参考:https://www.alfredforum.c ...

  8. 基于ads1299的可穿戴脑电信号采集之性能调试总结

    一 前言 问题背景: 最近做项目,遇到了一个问题,就是采集的信号有噪声,在这里做了很多尝试.   二 测试步骤 A 内部方波信号质量,通过测试发现内部方波信号质量特别好.这个说明了软件和存储这块,没啥 ...

  9. ubuntu下安装numpy和scipy正确方法

    1.numpy NumPy(Numeric Python)是用Python进行科学计算的基本软件包. NumPy是Python编程语言的扩展,增加了对大型多维数组和矩阵的支持,以及一个大型的高级数学函 ...

  10. 个人呕心沥血编写的全网最详细的kettle教程书籍

    笔者呕心沥血编写的kettle教程,涉及到kettle的每个控件的讲解和详细的实战示例 可以说是全网最详细的kettle教程,三天学完你就可以成为优秀的ETL专家!!! 现在免费分享出来!视频教程也已 ...