/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 4ms 1.527 MiB
#2 Accepted 4ms 1.527 MiB
#3 Accepted 75ms 1.75 MiB
#4 Accepted 18ms 1.527 MiB
#5 Accepted 23ms 1.703 MiB
#6 Accepted 85ms 1.547 MiB
#7 Accepted 16ms 1.625 MiB
#8 Accepted 19ms 1.75 MiB
#9 Accepted 83ms 1.691 MiB
#10 Accepted 106ms 1.535 MiB
#11 Accepted 27ms 1.535 MiB
#12 Accepted 60ms 1.898 MiB
#13 Accepted 85ms 2.184 MiB
#14 Accepted 114ms 2.055 MiB
#15 Accepted 223ms 2.43 MiB
#16 Accepted 259ms 2.555 MiB
#17 Accepted 280ms 2.555 MiB

Code

#include<bits/stdc++.h>
using namespace std;
const long long M=2e4+10,MOD=1000000000;
typedef long long ll;
int p[M];
int r[M];
vector<ll>vec[M],val[M];
vector<ll>prime;
int find(int x){
    if(p[x]==x)return x;
    else return find(p[x]);
}
void combine(int x,int y){
int a=find(x);
int b=find(y);
if(a==b)return;
if(r[a]>r[b]){
    r[a]+=r[b];
    p[b]=a;
}
else{
    r[b]+=r[a];
    p[a]=b;
}
}
void prime_factor(){
    prime.push_back(2);
    for(ll i=3;i*i<=MOD;i+=2){
        int ok=1;
        for(auto it:prime){
            if(it*it>i)break;
            if(i%it==0){
                ok=0;
                break;
            }
        }
        if(ok)prime.push_back(i);
    }
  //  cout<<prime.size()<<endl;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t=1;
    prime_factor();
    cin>>t;
    while(t--){
      int n,k;
      cin>>n>>k;
      vector<ll>a(n+1);
      for(int i=1;i<=n;i++)cin>>a[i];
      for(int i=1;i<=n;i++)p[i]=i,r[i]=1;
      map<int,vector<int>>mp;
      for(int i=1;i<=n;i++){
        int d=a[i];
        for(auto it:prime){
            if(it>d)break;
            if(d%it==0){
                mp[it].push_back(i);
                while(d>0 && d%it==0)d/=it;
            }
        }
        if(d>1)mp[d].push_back(i);
      }
      for(auto it:mp){
        int x=-1;
        for(int id:mp[it.first]){
            if(x!=-1){
                combine(x,id);
            }
            x=id;

        }
      }
      for(int i=1;i<=n;i++){
        int x=find(i);
        vec[x].push_back(i);
      }
      for(int i=1;i<=n;i++){
        vector<ll>v;
        for(auto it:vec[i]){
            v.push_back(a[it]);
            //cout<<it<<" ";
        }
        sort(v.rbegin(),v.rend());
        for(auto it:v)val[i].push_back(it);
           // cout<<endl;

      }

     ll mx=0;
     for(int i=1;i<=n;i++){
        int l=i;
        int r=i+k-1;
        int cnt=0;
        ll sum=0;
      //  cout<<"index"<<i<<"\n";
        for(int j=1;j<=n;j++){
            cnt=0;
        for(auto it:vec[j]){
            if(it>=l && it<=r){
               // cout<<val[j][cnt]<<" ";
                sum+=val[j][cnt];
                cnt++;
            }
        }
       // cout<<d<<endl;
    }
       //cout<<d<<endl;
        mx=max(mx,sum);
     }
     cout<<mx<<"\n";
     for(int i=1;i<=n;i++){
        vec[i].clear();
        val[i].clear();
     }

     

    }




    
   
   return 0;
 
}

Information

Submit By
Type
Submission
Problem
P1063 Another Maximum Sum in Subarray
Language
C++20 (G++ 13.2.0)
Submit At
2024-07-14 13:03:04
Judged At
2024-07-14 13:03:04
Judged By
Score
100
Total Time
280ms
Peak Memory
2.555 MiB