172642025-06-08 12:14:06algoproGamecpp17Time limit exceeded 30/1002.576s1268 KiB
// UUID: 3780d355-acc1-42bb-9734-e5ecf64aa0b2
#include <bits/stdc++.h>

using namespace std;


typedef pair<int,int> ii;
typedef long long ll;

#define X first
#define Y second

const int MOD=1e9+7;

const int N=1e5+10;
const ll inf=1e16;



int n,m,a[N];

int h[N];

ll solve(){
    for(int i=1;i<=m;i++) h[a[i]]++;
    ll ans=0;
    h[0]=1;
    for(int i=1,j=n;i<n;i++){
        while (!h[j]) j--;
        if (i==1){
            h[j]--;
            ans=-j;
            while (!h[j]) j--;
        }
        int val=j;
        if (i+m<=n){
            if (a[i+m]>=val) val=a[i+m],h[j]++;
            else h[a[i+m]]++;
        }
        h[j]--;
        ans+=(i&1)?val:-val;
//        cout<<m<<" "<<i<<" "<<val<<'\n';
    }
//    assert(count(h+1,h+N,1)==0);
    return -ans;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int test;
    scanf("%d%d",&n,&test);
//    assert()
    for(int i=1;i<=n;i++){
        scanf("%d",a+i);
//        assert(a[i]<=n);
    }
    while (test--){
        scanf("%d",&m);
        printf("%lld\n",solve());
    }
}

SubtaskSumTestVerdictTimeMemory
subtask110/10
1Accepted1ms316 KiB
2Accepted1ms368 KiB
subtask220/20
1Accepted1ms316 KiB
2Accepted1ms316 KiB
3Accepted3ms316 KiB
4Accepted4ms316 KiB
subtask30/70
1Accepted39ms464 KiB
2Accepted41ms316 KiB
3Accepted127ms504 KiB
4Accepted149ms512 KiB
5Accepted566ms820 KiB
6Accepted1.121s848 KiB
7Accepted777ms588 KiB
8Accepted748ms768 KiB
9Accepted1.069s1036 KiB
10Accepted1.467s1184 KiB
11Accepted1.082s820 KiB
12Time limit exceeded2.576s1076 KiB
13Accepted1.694s1080 KiB
14Time limit exceeded2.576s1268 KiB