Submission #1348906

#TimeUsernameProblemLanguageResultExecution timeMemory
1348906biankLottery (CEOI18_lot)C++20
100 / 100
212 ms6668 KiB
#include <bits/stdc++.h>
 
using namespace std;
 
#define forsn(i, s, n) for (int i = int(s); i < int(n); i++)
#define forn(i, n) forsn(i, 0, n)
#define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--)
#define dforn(i, n) dforsn(i, 0, n)
 
using vi = vector<int>;
using ii = pair<int, int>;
using vii = vector<ii>;
using ll = long long;
using ld = long double;
using vll = vector<ll>;
using vb = vector<bool>;
using pll = pair<ll, ll>;

#define sz(x) int(x.size())
#define all(x) begin(x), end(x)

#define pb push_back
#define eb emplace_back
#define ef emplace_front

#define fst first
#define snd second

int main() {
    ios::sync_with_stdio(0);                
    cin.tie(0); cout.tie(0);
    
    int n, l;
    cin >> n >> l;
    
    vi a(n);
    forn(i, n) cin >> a[i];
    
    int q;
    cin >> q;
    vector<short> k(q);
    forn(i, q) cin >> k[i];
    
    vector<short> ks = k;
    sort(all(ks));
    
    vector<short> pos(l + 1);
    int j = 0;
    forn(i, l + 1) {
        while (j < sz(ks) && ks[j] < i) j++;
        pos[i] = j;
    }
    
    vector<vector<short>> cnt(n - l + 1, vector<short>(sz(k) + 1));
    forsn(d, -n + 1, n) if (d != 0) {
        int s = max(0, -d);
        int e = min(n, n - d);
        short curr = 0;
        forsn(i, s, e) {
            curr += a[i] != a[i + d];
            if (i - s >= l) curr -= a[i - l] != a[i - l + d];
            if (i - s >= l - 1) {
                cnt[i - (l - 1)][pos[curr]]++;
            }
        }
    }
    
    forn(i, n - l + 1) forn(j, sz(ks)) cnt[i][j + 1] += cnt[i][j];
    
    forn(_, q) {
        int j = pos[k[_]];
        forn(i, n - l + 1) cout << cnt[i][j] << " \n"[i == n - l];
    }
    
    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...