【题目】C. Superior Periodic Subarrays

【题意】给定循环节长度为n的无限循环数列,定义(l,s)表示起点为l的长度为s的子串,(l,s)合法要求将子串从该起点开始以s为循环节长度无限循环中每个数字都>=数列中对应位置的数字,求合法(l,s)的数量。0<=l<n,1<=s<=n,n<=2*10^5,1<=ai<=10^6。

【算法】数论,计数问题

【题解】先不考虑起点,对于选定的s,子串中的数字必须≥所有间隔为g=gcd(s,n)的数字(核心思想)

例如在1 2 3 4 5 6,g=2时,1 3 5为一组,2 4 6为一组,子串中如果包含某一组的一个,那个就必须≥整组的数字。

枚举g,对于数列中g个[数字间隔为g的序列],显然每个序列中只有最大的数字才有可能被选择为子串,那么处理后我们得到了01数列。

对于01数列,我们要用连续的1凑出长度s满足gcd(s,n)=g,先使用双指针统计出几段连续的1,对于每一段连续的1枚举长度贡献答案。

复杂度O(d(n)*n),其中d(n)为n的因子个数。

以上为CF官方题解,在处理01序列的时候可以采用一种较简单的写法:

枚举g,预处理c[x]表示长度i=1~x中满足g=gcd(i,n)的 i 的个数。

处理出01序列,然后将链复制一遍,倒着计算出b[i]表示从i出发最长的连续1个数。

最后枚举起点l,每个点贡献答案c[b[i]]。

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;
int n,a[maxn],b[maxn<<],c[maxn],mx[maxn],gc[maxn];
int gcd(int a,int b){return !b?a:gcd(b,a%b);}
//learn from LIBERATOR
int main(){
scanf("%d",&n);
for(int i=;i<n;i++)scanf("%d",&a[i]);
for(int i=;i<n;i++)gc[i]=gcd(i,n);
long long ans=;
for(int g=;g<n;g++)if(n%g==){
for(int i=;i<=n;i++)c[i]=c[i-]+(gc[i]==g);
for(int i=;i<g;i++)mx[i]=a[i];
for(int i=g;i<n;i++)mx[i%g]=max(mx[i%g],a[i]);
for(int i=;i<n;i++)b[i]=b[i+n]=(mx[i%g]==a[i]);
for(int i=n+n-;i>=;i--)if(b[i])b[i]+=b[i+];
for(int i=;i<n;i++)ans+=c[min(n-,b[i])];
}
printf("%lld",ans);
return ;
}

最新文章

  1. 基于网格的波动方程模拟(Wave equation on mesh)附源码
  2. ssential Diagram for Windows FormsC#/winForm类似visio的拓扑图节点连线控件免费下载
  3. iOS开发- 蓝牙后台接收数据(BLE4.0)
  4. 基于Hadoop 2.2.0的高可用性集群搭建步骤(64位)
  5. [Whole Web] [AngularJS] Localize your AngularJS Application with angular-localization
  6. JQuery DOM 有关代码练习
  7. Android手势识别总结
  8. Flex移动应用程序开发的技巧和窍门(五)
  9. spring的一些问题
  10. Java_web学习(二) eclipse(tomcat)配置
  11. Invalid Host header
  12. 第46章 发现端点(Discovery Endpoint) - Identity Server 4 中文文档(v1.0.0)
  13. C++ 配置文件类的封装
  14. jQuery 传递对象参数到Spring Controller
  15. [c/c++] programming之路(17)、高级指针
  16. JS定义一个立即执行的可重用函数
  17. PHP微信公众号开发之自动回复
  18. bootstrap3文章
  19. [已解决]下载chromium源码 download_from_google_storage 无法下载文件
  20. 图论-最短路径 2.Dijkstra算法O (N2)

热门文章

  1. 【OpenGL】无法启动此程序,因为计算机中丢失 glut32.dll。尝试重新安装该程序以解决此问题。
  2. Windows资源监控工具大全
  3. 使用js 复制 文字到剪贴板
  4. Qt——设计颜色编辑选取对话框
  5. BZOJ4897 THUSC2016成绩单(区间dp)
  6. 计蒜客 17417 Highest Tower(思维+图论)
  7. 【刷题】SPOJ 705 SUBST1 - New Distinct Substrings
  8. spring任务执行器与任务调度器(TaskExecutor And TaskScheduler)
  9. SPOJ8222/NSUBSTR:Substrings——题解
  10. excel 列索引(数字)转列名