LG12716

观察数据范围,考虑枚举每个区间 \([l,r]\),使用前缀和快速求出区间和并判断是否为完全平方数,若是则对 \(i \in [l,r]\) 都产生 \(1\) 的贡献,使用差分数组维护即可。时间复杂度 \(O(n^2)\)


#include <iostream>
#include <cstdio>
#include<cmath>
#define int long long
#define N 10010
using namespace std;
int n,a[N],s[N],d[N];
signed main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i],s[i]=s[i-1]+a[i];
    for(int i=1;i<=n;i++){
        for(int j=i;j<=n;j++){
            int k=sqrt(s[j]-s[i-1]);
            if(k*k==s[j]-s[i-1]){
                d[i]++;d[j+1]--;
            }
        }
    }
    for(int i=1;i<=n;i++)
        d[i]+=d[i-1],cout<<d[i]<<endl;
    return 0;
}

posted @ 2025-09-12 08:09  FormulaOne  阅读(10)  评论(0)    收藏  举报