题意:

有一个数字串S,初始长度为n,是1 2 3 4 …… n。

有m次操作,每次操作给你一个正整数a[i],你先把S无穷重复,然后把前a[i]截取出来成为新的S。

求m次操作后,每个数字在S中出现的次数。

$n,m \leq 10^5 , a[i] \leq 10^{18}$

首先明显要倒着做,正着不好做。

我们发现,对于$a$这个数组,如果存在$j$满足$j>i,a[j]<a[i]$,那么$a[i]$这个操作就是可以删掉的

这样处理过后,$a$就变成了一个递增的数组。

我们用$f[x]$表示第$x$个操作之后的序列,在最后的序列中,整个出现多少次。

倒着考虑每一个操作,假如我们考虑到了操作$X$。

我们设第$X$个操作前的序列为$P[X-1]$,第$X$个操作后的序列为$P[X]$

那么$P[X]$一定由几个完整的$P[X-1]$加上一段长度为$l$的$P[X-1]$的前缀(边角料)构成。

对于完整的部分,我们显然可以用$f[X]$直接转移到$f[X-1]$,主要是对于剩下长度为$l$的部分,单独考虑这一部分的贡献。

我们二分找到最靠右那个长度$\leq l$的$P[i]$,这个时候,这一部分的贡献,有一些可以完整的作用于$f[i]$上,然后还会剩下一段边角料

我们可以一直这样一直递归下去,到了最后特殊处理一下。

每次$l$都会$mod \ |P[i]|$,长度至少会减一半,所以复杂度是带2个log的,可以接受。

我一开始想这道题的时候,一直在想什么数据结构维护每一位的贡献,结果发现维护不来。

所以说,突破点在$f$这个数组的构造上,我们不一定要维护每一位的贡献,我们可以维护一个序列的贡献。

我太蠢啦。

agc003E Sequential operations on Sequence的更多相关文章

  1. 【做题】agc003E - Sequential operations on Sequence——经典结论

    题意:有一个序列,初始是从\(1\)到\(n\)的\(n\)个数.有\(q\)次操作,每次操作给出\(q_i\),把当前的序列重复无数遍,然后截取最前面的\(q_i\)个元素作为新序列.要求输出完成所 ...

  2. 【agc003E】Sequential operations on Sequence

    Portal -->agc003E Description 给你一个数串\(S\),一开始的时候\(S=\{1,2,3,...,n\}\),现在要对其进行\(m\)次操作,每次操作给定一个\(a ...

  3. Agc003_E Sequential operations on Sequence

    传送门 题目大意 $1,2...n,n$个数从小到大排列,有$m$此操作,每次操作给定一个参数$x$,将当且数列作为循环节无限地展开下去,再取前$x$个作为新的数列,求最终的数列每个数出现的次数. $ ...

  4. AtCoder Grand Contest 003 E - Sequential operations on Sequence

    题目传送门:https://agc003.contest.atcoder.jp/tasks/agc003_e 题目大意 一串数,初始为\(1\sim N\),现有\(Q\)个操作,每次操作会把数组长度 ...

  5. 【AGC003 E】Sequential operations on Sequence

    Description 你有一个长度为 \(n\) 的序列,第 \(i\) 项为 \(i\). 有 \(m\) 次操作,每次操作给定一个 \(x\),你需要将序列无限循环后截取前 \(x\) 项,作为 ...

  6. 【题解】Atcoder AGC#03 E-Sequential operations on Sequence

    仙题膜拜系列...首先我们可以发现:如果在截取了一段大的区间之后再截取一段小的区间,显然是没有什么用的.所以我们可以将操作序列变成单调递增的序列. 然后怎么考虑呢?启示:不一定要考虑每一个数字出现的次 ...

  7. AtCoder刷题记录

    构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...

  8. AtCoder Grand Contest 003

    AtCoder Grand Contest 003 A - Wanna go back home 翻译 告诉你一个人每天向哪个方向走,你可以自定义他每天走的距离,问它能否在最后一天结束之后回到起点. ...

  9. RE:从零开始的AGC被虐(到)生活(不能自理)

    RE:从零开始的AGC被虐(到)生活(不能自理) 「一直注视着你,似近似远,总是触碰不到.」 --来自风平浪静的明天 AtCoder Grand Contest 001 B: Mysterious L ...

随机推荐

  1. 使用Image作为BackgroundColor 使用

    https://www.hackingwithswift.com/example-code/uicolor/how-to-use-an-image-for-your-background-color- ...

  2. Python全栈开发:html标签

    Html是什么? htyper text markup language 即超文本标记语言 超文本: 就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 标记语言: 标记(标签)构成的语言. ...

  3. 跟我一起使用socket.io创建聊天应用

    安装express插件 新建index.js var app = require('express')(); var http = require('http').Server(app); app.g ...

  4. C++:多线程002

    https://blog.csdn.net/morewindows/article/details/7442333 程序描述:主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给子线程.子 ...

  5. js实现把多个数据分成3个一组

    主要代码: var stuCount = res.data; if (stuCount.length>0){ var objList = new Object(); var arr = new ...

  6. SPOJ - LOCKER

    SPOJ - LOCKERhttps://vjudge.net/problem/45908/origin暴力枚举2-102 23 34 2 25 2 36 3 37 2 2 38 2 3 39 3 3 ...

  7. data hazard in CPU pipeline

    1, background info 5 stages in CPU pipeline: IF, ID, EX, MM, WB IF – Instruction Fetch ID – Instruct ...

  8. BZOJ2226:[SPOJ5971]LCMSum

    Description Given n, calculate the sum LCM(1,n) + LCM(2,n) + .. + LCM(n,n), where LCM(i,n) denotes t ...

  9. Ubuntu GitHub操作——分支、合并与标签

    分支 分支是用来将特性开发绝缘开来的.在你创建仓库的时候,master 是"默认的"分支.在其他分支上进行开发,完成后再将它们合并到主分支上. 创建一个叫做"featur ...

  10. springmvc jar包下载

    (1) springmvc jar包下载 提供地址 - qq_31307253的博客 - CSDN博客https://blog.csdn.net/qq_31307253/article/details ...