☰
打卡信奥刷题(3613)用C++实现信奥题 P11753 [COCI 2024/2025 #5] 塔楼 / Tornjevi
2026/10/7 6:56:28 网站建设 项目流程

P11753 [COCI 2024/2025 #5] 塔楼 / Tornjevi

题目背景

译自 COCI 2024/2025 #5 T3。2s,0.5G \texttt{2s,0.5G}2s,0.5G。满分为90 9090。

题目描述

给定正整数序列h 1 , … , h n h_1,\ldots,h_nh1​,…,hn​。

对于区间[ l , r ] [l,r][l,r],我们称i ii(l ≤ i ≤ r l\le i\le rl≤i≤r)关于[ l , r ] [l,r][l,r]是好的,当且仅当:h i = gcd ⁡ ( h l , h l + 1 , … , h r ) h_i=\gcd(h_l,h_{l+1},\ldots,h_r)hi​=gcd(hl​,hl+1​,…,hr​)。

对于i ii,定义f ( i ) f(i)f(i)表示:所有i ii关于[ l , r ] [l,r][l,r]是好的区间中,r − l + 1 r-l+1r−l+1的最大值。

对于i = 1 , 2 , … , n i=1,2,\ldots,ni=1,2,…,n,求出f ( i ) f(i)f(i)。

输入格式

第一行,正整数n nn。

第二行,n nn个正整数h 1 , h 2 , … , h n h_1,h_2,\ldots,h_nh1​,h2​,…,hn​。

输出格式

输出n nn个正整数f ( 1 ) , f ( 2 ) , … , f ( n ) f(1),f(2),\ldots,f(n)f(1),f(2),…,f(n)。

输入输出样例 #1

输入 #1

6 3 6 6 6 1 3

输出 #1

4 3 3 3 6 1

输入输出样例 #2

输入 #2

5 10 2 10 15 5

输出 #2

1 3 1 1 3

说明/提示

数据范围

对于100 % 100\%100%的数据,保证1 ≤ n , h i ≤ 10 6 1\le n,h_i\le 10^61≤n,hi​≤106。

子任务编号n ≤ n\len≤特殊性质得分
$ 1 $100 100100$ 7 $
$ 2 $5 × 10 3 5\times 10^35×103$ 11 $
$ 3 $5 × 10 4 5\times 10^45×104$ 17 $
$ 4 $10 6 10^6106A$ 29 $
$ 5 $10 6 10^610626 2626

特殊性质 A:h i ≤ 100 h_i\le 100hi​≤100。

C++实现

#include<bits/stdc++.h>usingnamespacestd;#defineMAXN1000010intg[MAXN][21],n,b[MAXN];intansl[MAXN],ansr[MAXN];intgcd(intx,inty){return(y==0?x:gcd(y,x%y));}voidinit(){for(intj=1;j<20;j++)for(inti=1;i+(1<<j)-1<=n;i++)g[i][j]=gcd(g[i][j-1],g[i+(1<<(j-1))][j-1]);}intquery(intl,intr){intk=b[r-l+1];returngcd(g[l][k],g[r-(1<<k)+1][k]);}intask(intx,intb){intl=1,r=b==1?x-1:n-x,ans=0;while(l<=r){intmid=(l+r)/2;intnow=(b==1?query(x-mid,x):query(x,x+mid));if(g[x][0]==now)ans=mid,l=mid+1;elser=mid-1;}returnans;}intmain(){scanf("%d",&n);for(inti=2;i<=1e6;i++)b[i]=b[i/2]+1;for(inti=1;i<=n;i++)scanf("%d",&g[i][0]);init();for(inti=n;i>=1;i--)ansl[i]=i-ask(i,1),ansr[i]=i+ask(i,2);for(inti=1;i<=n;i++)printf("%d ",ansr[i]-ansl[i]+1);return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询