Submission #1324815

#TimeUsernameProblemLanguageResultExecution timeMemory
1324815comet0Sličnost (COI23_slicnost)C++20
24 / 100
3096 ms589824 KiB
#include <bits/stdc++.h>
using namespace std;

pair<int, int> calc(int n, int k, const vector<int> &p, const vector<int> &q) {
    int m = n - k + 1, best = -1, ways = 0;
    vector<int> pp(n + 1), pq(n + 1);
    for (int i = 0; i < n; i++) pp[p[i]] = i, pq[q[i]] = i;
    vector<vector<int>> d(m + 1, vector<int>(m + 1));
    for (int v = 1; v <= n; v++) {
        int x1 = max(0, pp[v] - k + 1), x2 = min(m - 1, pp[v]);
        int y1 = max(0, pq[v] - k + 1), y2 = min(m - 1, pq[v]);
        d[x1][y1]++;
        if (x2 + 1 < m) d[x2 + 1][y1]--;
        if (y2 + 1 < m) d[x1][y2 + 1]--;
        if (x2 + 1 < m && y2 + 1 < m) d[x2 + 1][y2 + 1]++;
    }
    for (int i = 0; i < m; i++) for (int j = 0; j < m; j++) {
        if (i) d[i][j] += d[i - 1][j];
        if (j) d[i][j] += d[i][j - 1];
        if (i && j) d[i][j] -= d[i - 1][j - 1];
        if (d[i][j] > best) best = d[i][j], ways = 1;
        else if (d[i][j] == best) ways++;
    }
    return {best, ways};
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, k, Q; cin >> n >> k >> Q;
    vector<int> p(n), q(n);
    for (int &x : p) cin >> x;
    for (int &x : q) cin >> x;
    auto [b, w] = calc(n, k, p, q);
    cout << b << ' ' << w << '\n';
    while (Q --> 0) {
        int x; cin >> x; --x;
        swap(p[x], p[x + 1]);
        tie(b, w) = calc(n, k, p, q);
        cout << b << ' ' << w << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...