Submission #248572

#TimeUsernameProblemLanguageResultExecution timeMemory
248572SprdaloLottery (CEOI18_lot)C++17
100 / 100
1193 ms20476 KiB
#include <bits/stdc++.h>

using namespace std;

#define int ll
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<double> vd;
typedef vector<bool> vb;
typedef vector<char> vc;
typedef vector<string> vs;
typedef vector<pi> vp;
typedef vector<pl> vpl;

vi t;
vector<vi> sol;

void sredi(int a, int b, int d){
    auto it = lower_bound(t.begin(), t.end(), d);

    if (it == t.end()) return;
    int ind = it - t.begin();

    sol[ind][a]++;
    sol[ind][b]++;
}

signed main()
{
    ios_base::sync_with_stdio(false); 
    cin.tie(nullptr); 
    cout.tie(nullptr); 
    cerr.tie(nullptr);    

    int n, x;
    cin >> n >> x;

    vi a(n);
    for (auto& i : a)
        cin >> i;

    int m;
    cin >> m;

    vi q(m);
    set<int> st;
    for (auto& i : q){
        cin >> i;
        st.insert(i);
    }

    for (auto& i : st)
        t.push_back(i);

    int sz = t.size();
    sol = vector<vi>(sz + 2, vi(n + 2, 0));
    vi con(x + 1, 0);
    for (int i = 0; i < sz; ++i){
        con[t[i]] = i;
    }

    for (int dist = 1; dist <= n - x; ++dist){
        int l = 0, r = x - 1, dif = 0;
        for (int i = l; i <= r; ++i){
            dif += (a[i] != a[i + dist]);
        }
        sredi(l, l + dist, dif);

        while(1){
            if (r + dist + 1 >= n) break;
            dif -= (a[l] != a[l + dist]);
            dif += (a[r + 1] != a[r + dist + 1]);
            ++r;
            ++l;
            sredi(l, l + dist, dif);
        }
    }

    vector<vi> p(sz + 2, vi(n + 2, 0));
    for (int i = 0; i < n; ++i){
        p[0][i] = sol[0][i];
        for (int j = 1; j < sz; ++j){
            p[j][i] = p[j - 1][i] + sol[j][i];
        }
    }

    for (int i = 0; i < m; ++i){
        int ind = con[q[i]];

        for (int j = 0; j < n-x+1; ++j){
            cout << p[ind][j] << ' ';
        }

        cout << '\n';
    }
}
#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...