正题

题目链接:https://www.luogu.com.cn/problem/AT2005


题目大意

开始有一个1∼n1\sim n1∼n依次排列的序列,然后QQQ次,第iii次把序列长度变为aia_iai​,不足的从前往后循环填充。

求最后每个数字的出现次数。

1≤n,q≤105,1≤ai≤10181\leq n,q\leq 10^5,1\leq a_i\leq 10^{18}1≤n,q≤105,1≤ai​≤1018


解题思路

首先肯定是先搞出一个单调栈来,然后考虑每次复制重复的部分。

考虑第iii次,首先是原先的序列重复⌊aiai−1⌋\lfloor\frac{a_i}{a_{i-1}}\rfloor⌊ai−1​ai​​⌋次,然后后面会剩下ai%ai−1a_i\%a_{i-1}ai​%ai−1​个。

这两个部分其实是可以分开处理的,重复的部分我们维护fif_ifi​表示第iii次后的序列重复了多少次。然后对于剩下的那一部分也挺好处理的,假设长度为ccc,那么我们就会一直重复到一个ai≤ca_i\leq cai​≤c的位置才会改变,而每次改变又会变成c%aic\%a_ic%ai​,所以如果我们二分这个aia_iai​的话就能做到O(log⁡2n)O(\log^2n )O(log2n)的了,然后找到c<nc<nc<n的时候就是让1∼c1\sim c1∼c的次数加上一个值,差分就好了。

时间复杂度:O(nlog⁡2n)O(n\log ^2n)O(nlog2n)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e5+10;
ll n,m,q,a[N],b[N],f[N];
void dfs(ll c,ll d){ll x=upper_bound(a+1,a+1+m,c)-a-1;if(!x)b[c]+=d;else f[x]+=c/a[x]*d,dfs(c%a[x],d);return;
}
signed main()
{scanf("%lld%lld",&n,&q);a[++m]=n;while(q--){ll x;scanf("%lld",&x);while(m>0&&x<=a[m])m--;a[++m]=x;}f[m]=1;for(ll i=m;i>=2;i--)f[i-1]+=a[i]/a[i-1]*f[i],dfs(a[i]%a[i-1],f[i]);b[a[1]]+=f[1];for(ll i=n;i>=1;i--)b[i]+=b[i+1];for(ll i=1;i<=n;i++)printf("%lld\n",b[i]);return 0;
}

AT2005-[AGC003E]Sequential operations on Sequence【差分,思维】相关推荐

  1. CH - 0304 IncDec Sequence(差分+思维)

    题目链接:点击查看 题目大意:给定一个长度为 n(n≤10^5 ) 的数列 {a_1,a_2,-,a_n},每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一.求至少需要多少次操 ...

  2. Simple Operations on Sequence

    F - Simple Operations on Sequence Editorial / Time Limit: 2 sec / Memory Limit: 1024 MB Score : 5005 ...

  3. CodeForces - 1110E-Magic Stones(差分+思维)

    Grigory has nn magic stones, conveniently numbered from 11 to nn. The charge of the ii-th stone is e ...

  4. 100. 增减序列【差分 / 思维】

    本题考察的是差分的思想. 设 b[i]=a[i]-a[i-1] 因为我们要想让其所有的数字都相等.故即b[2],b[3].......b[n]都得为0才行. 此时数组所有的数的值都是b[1]. 因为我 ...

  5. CodeForces - 1000C Covered Points Count(差分+思维)

    题目链接:点击查看 题目大意:给出n个区间,现在要求输出覆盖次数为1,2,3....n-1,n的点分别有多少个 题目分析:一开始看到区间问题想用线段树去做,但想了想又可以直接用差分去做,不过因为数比较 ...

  6. Codeforces Round #590 (Div. 3) E. Special Permutations 差分 + 思维

    传送门 文章目录 题意: 思路: 题意: 思路: 直接考虑比较难想,这种公式题基本都是将部分答案看成一个整体,考虑xi,xi+1x_i,x_{i+1}xi​,xi+1​的贡献的. 假设当前的xi=x, ...

  7. 【2019icpc南京站网络赛 - F】Greedy Sequence(思维,贪心构造,STLset)

    题干: You're given a permutation aa of length nn (1 \le n \le 10^51≤n≤105). For each i \in [1,n]i∈[1,n ...

  8. 2021CCPC“第一场”网络赛 GCD on Sequence(思维,线段树)

    GCD on Sequence 原题链接 我们可以发现,假设区间 [l,r][l,r][l,r] 内 v(l,r)=dv(l,r)=dv(l,r)=d ,那么 [l,r][l,r][l,r] 内肯定至 ...

  9. 2017-2018 ACM-ICPC Asia East Continent League Final J. Straight Master(差分+思维)

    LINK] 首先能每次选择长度为3,4,53,4,53,4,5的区间长度加一 相当于可以让长度大于等于333任意的区间整体加一,因为3,4,53,4,53,4,5可以凑成任意数 但这样还是不好写,考虑 ...

最新文章

  1. System.Object 基类
  2. 元素算法Bloom Filter
  3. linux 查本机公网ip 网站接口 nmap工具
  4. 20165303实验一 Java开发环境的熟悉
  5. 卡顿严重_王者峡谷:S20出现bug?卡顿十分严重
  6. 设计模式之——工厂方法模式
  7. 小程序学习(2):vs code 安装插件
  8. Ettercap-中间人欺骗
  9. SQLite3中的SQL基本语句和高级语句
  10. Storm编译打包过程中遇到的一些问题及解决方法
  11. jenkins sonar配置
  12. HTML DOM Event(事件)
  13. 3t中文 studio_studio 3t免费版
  14. 怎么看计算机配置好不好,电脑参数怎么看
  15. BT1120中的串行传输
  16. 淘淘商城第39讲——使用Spring来管理单机版Redis与集群版Redis
  17. CNN-LSTM的flatten
  18. 总结:LSM-Tree
  19. JavaScript 深度剖析 - JavaScript 性能优化
  20. Linux 用户切换、修改用户名、修改密码

热门文章

  1. data:text/html firefox钓鱼,JS DataURL 整理(一)
  2. 在linux文件共享接口,入坑Linux-day13(使用vsftpd服务传输文件、使用Samba或NFS实现文件共享)...
  3. linux 往文件写4k大小,[svc]为何linux ext4文件系统目录默认大小是4k?
  4. ibm台式计算机不能自动关机,IBM X3650 M3 不定时自动关机求大神
  5. 7-3 符号三角形 (10 分)(思路+详解)
  6. DFS和BFS总结和代码演示(详解)
  7. 查漏补缺方为上策!!两万六字总结vue的基本使用和高级特性,周边插件vuex和vue-router任你挑选
  8. [RabbitMQ]什么是MQ
  9. AcWing 1113. 红与黑
  10. [蓝桥杯]带分数-dfs