结果始终是0
查看原帖
结果始终是0
934631
Perry6632楼主2025/8/4 11:52
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxN=4501501;
ll a=0,n=0,k=0,st[maxN][12]{},pos[maxN]={};
ll size(ll x){
    return x*(x+1)/2;
}
ll down(ll x,ll y){
    return size(pos[x]-1+y) + x - size(pos[x]-1);
}
ll fx(ll x,ll s){
    ll l=1<<__lg(s);
    ll r1=max(st[x][__lg(s)],max(st[down(x,s-l)][__lg(s)],st[down(x,s-l)+s-l][__lg(s)]));
    ll r2= max(st[down(x,l)+l/2][__lg(s)],max(st[down(x,l/2)][__lg(s)],st[down(x,l/2)+l/2][__lg(s)]));
    return max(r1,r2);
}
int main(){
    cin>>n>>k;
    ll sn=size(n);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=i;j++)
            pos[++a]=i;
    for(int i=1;i<=sn;i++)
        cin>>st[i][0];
    for(int i=1;i<=__lg(n);i++){
        ll l=1<<i;
        for(int j=1;pos[j]+l<n+1;j++)
            st[j][i-1]=fx(j,l);
    }
    ll ans=0;
    for(int i=1;pos[i]+k<n+1;i++)
        ans+=fx(i,k);
    cout<<ans;
	return 0;
}
2025/8/4 11:52
加载中...