Submission #1232408

#TimeUsernameProblemLanguageResultExecution timeMemory
1232408Hamed_GhaffariLottery (CEOI18_lot)C++20
25 / 100
1 ms328 KiB
#include <bits/stdc++.h>
using namespace std;

const int MXN = 1003, MXQ = 103;

int n, l, q, a[MXN], ans[MXQ][MXN], k[MXQ], ord[MXQ], dp[MXN], cnt[MXN];

inline int dif(int x, int y) {
    int res = 0;
    if(x>0 && y>0 && a[x-1]!=a[y-1]) res--;
    if(a[x+l-1]!=a[y+l-1]) res++;
    if(x==0 || y==0)
        for(int i=0; i+1<l; i++) res += a[x+i]!=a[y+i];
    return res;
}

int32_t main() {
    cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
    cin >> n >> l;
    for(int i=0; i<n; i++) cin >> a[i];
    cin >> q;
    for(int i=0; i<q; i++) {
        cin >> k[i];
        ord[i] = i;
    }
    sort(ord, ord+q, [&](int i, int j) { return k[i] < k[j]; });
    for(int i=0; i<n-l+1; i++) {
        fill(cnt, cnt+l+1, 0);
        for(int j=n-l; j>=0; j--)
            cnt[dp[j] = dif(i, j) + (j?dp[j-1]:0)]++;
        int ptr=0, sum=0;
        for(int j=0; j<q; j++) {
            while(ptr<=k[ord[j]])
                sum += cnt[ptr++];
            ans[ord[j]][i] = sum-1;
        }
    }
    for(int i=0; i<q; i++) {
        for(int j=0; j<n-l+1; j++)
            cout << ans[i][j] << ' ';
        cout << '\n';
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...