Source Code
#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define p1 2*p
#define p2 p1+1
#define ll long long
#define pb push_back
#define LFT p1,L,Mid
#define pf push_front
#define Mid ((L+R)/2)
#define RGT p2,Mid+1,R
#define pi pair<int,int>
#define pii pair<pi,pi>
#define deb(x) cout<<#x<<"="<<x<<endl
#define go ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
const int N = 1e6 + 7;
int la[N];
void seive()
{
    for(int i=0; i<N; i++)
        la[i]=i;
    for(int i=2; i<N; i++)
        if(la[i]==i)
            for(int j=i+i; j<N; j+=i)
                la[j]=i;
}

ll b(int x)
{
    ll ret=0;
    while(x)
    {
        if(x&1)
            ret++;
        x/=2;
    }
    return ret;
}

void print(vector <ll> & a,int level)
{
    return;
    cout<<level<<endl;
    for(int x : a)
        cout<<x<<" ";
    cout<<"\n============\n";
}
int main()
{
    go;
    //1
    int n;
    cin>>n;
    int originalN=n;
    vector <ll> a(n);
    for(int i=0; i<n; i++)
        cin>>a[i];
    a.pb(0);
    print(a,1);
    // end 1
    // 2
    for(int i=0; i+1<a.size(); i++)
        a[i]=max(a[i],a[i+1]);
    print(a,1);
    // end 2
    // 3 and 4
step3:
    if(a.size()%2==0)
    {
        n=a.size()/2;
        reverse(a.begin(),a.begin()+n);
        reverse(a.begin()+n,a.begin()+n+n);
    }
    else
    {
        ll sum=0;
        while(a.size() && sum+a.back()<=originalN)
        {
            sum+=a.back();
            a.pop_back();
        }
        goto step3;
    }
    print(a,4);
    // end 3 and 4
    // 5
    step5:
    a.pb(3);
    a.pb(2);
    a.pb(1);
    print(a,5);
    // end 5
    // 6
    for(int i=0; i<a.size(); i++)
    {
        int len=a.size();
        len--;
        if(a[i]>a[len])
            swap(a[i],a[len]);
    }
    print(a,6);
    // end 6
    // 7
    a[0]=1031;
    print(a,7);
    // end 7
    // 8
    seive();
    for(int i=0; i<a.size(); i++)
        a[i]=la[a[i]];
    //print(a,8);
    // end 8
    // 9
    sort(a.rbegin(),a.rend());
    //print(a,9);
    // end 9
    // 10
    for(int i=0; i<a.size(); i++)
        a[i]=a[i]%16384;
    //print(a,10);
    // end 10
    // 11
    for(int i=1; i+2<a.size(); i++)
    {
        if(a[i]==6 && a[i+1]==7 && a[i+2]==9)
            swap(a[i],a[i-1]);
    }
    //print(a,11);
    // end 11
     // 12
     for(int i=0;i<a.size();i++)
        a[i]*=b(a[i]);
    //print(a,12);
    // end 12
     // 13
    //print(a,13);
    // end 13
    if(a.size()%2==1)
        goto step5;
    if(a[0]==0 || a.back()==0)
        a={1,2,3,4,5};
    ll ans=0;
    for(ll i=1;i<=a.size();i++)
        ans+=a[i-1]*i;
    cout<<ans;
    return 0;
}
Copy
Slavery Grapeee
GNU G++17
46 ms
5.7 MB
Accepted