![](/img/trans.png)
[英]How to find the index of element which just smaller than current element in set (c++20)
[英]check number of multiples of the element in array having index smaller than that element
問題描述:
你得到一個序列
A1,A2,…,AN
。 對於每個有效i
,元素A_i
的星值是有效索引j<i
的數量,使得A_j
可以被A_i
整除。 找到給定序列中的最大星值。
我的嘗試:
我已經嘗試過一種方法,可以在數組中找到最大元素,直到第i
個索引(比如MAX_i
)。 我為所有元素保留一個計數數組f[]
。 我正在從A_i
迭代到MAX_i
並以A_i
的倍數迭代並計算可被A_i
整除的元素數ans=ans+f[element]
long long int n,key,m=-1,ans=0,star_max=-1;
int f[1000004];
memset(f, 0, sizeof(f));
scanf("%lld", &n);
for (int i = 0; i < n; ++i)
{
scanf("%lld", &key);
ans=0;
for(long long int i=key;i<m;i+=key)
{
ans+=f[i];
}
if(ans > star_max)
star_max=ans;
f[key]++;
if (a[i] > m)
m=a[i];
}
cout<<star_max;
任何 O(N) 或 O(NlogN) 方法都值得贊賞。
long long int N;
long long int c[1000006],val,max_star=-1;
memset(c, 0, sizeof(c));
scanf("%lld", &N);
for (int i = 0; i < N; ++i)
{
scanf("%lld", &val);
if(c[val] > max_star)
max_star=c[val];
long long int s=sqrt(val);
for(int j=1;j<=s;j++)
{
if(val%j == 0)
{
c[j]++;
long long int r=val/j;
if(r != j)
{
c[r]++;
}
}
}
}
printf("%lld",max_star);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.