Submission #1312381

#TimeUsernameProblemLanguageResultExecution timeMemory
1312381repmannSličnost (COI23_slicnost)C++20
0 / 100
1 ms332 KiB
#include <bits/stdc++.h> using namespace std; int N, W, K, Q; int A[100001], B[100001], I[100001], D[100001], CNT[100001]; int QR[100001]; vector <array <int, 4>> V[100001]; vector <pair <int, int>> T[100001]; int O[100001]; struct Node { int mx, cnt, p; }ST[400001]; inline void Merge(int i) { if(i >= W) return; ST[i].mx = max(ST[i << 1].mx, ST[i << 1 | 1].mx); ST[i].cnt = 0; ST[i].cnt += (ST[i << 1].mx == ST[i].mx) * ST[i << 1].cnt; ST[i].cnt += (ST[i << 1 | 1].mx == ST[i].mx) * ST[i << 1 | 1].cnt; return; } inline void Setup() { W = 1; while(W < N) W <<= 1; for(int i = 1; i <= N; i++) ST[i + K - 1] = {0, 1, 0}; for(int i = K - 1; i; i--) Merge(i); return; } inline void Propagate(int i) { if(!ST[i].p) return; if(i < W) { ST[i << 1].p += ST[i].p; ST[i << 1 | 1].p += ST[i].p; } ST[i].mx += ST[i].p; ST[i].p = 0; return; } inline void Add(int l, int r, int x, int i = 1, int lc = 1, int rc = W) { Propagate(i); if((l > rc) || (lc > r)) return; if((l <= lc) && (rc <= r)) {ST[i].p += x; return Propagate(i);} int s = (lc + rc) >> 1; Add(l, r, x, i << 1, lc, s); Add(l, r, x, i << 1 | 1, s + 1, rc); Merge(i); return; } int main() { ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin >> N >> K >> Q; if(Q) return 0; for(int i = 1; i <= N; i++) cin >> A[i]; for(int i = 1; i <= N; i++) cin >> B[i]; for(int i = 1; i <= N; i++) I[B[i]] = i; Setup(); map <int, int> MAP; for(int i = 1; i <= K; i++) Add(max(I[A[i]] - K + 1, 1), min(I[A[i]], N - K + 1), +1); // cout << ST[1].mx << ' ' << ST[1].cnt << '\n'; MAP[ST[1].mx] += ST[1].cnt; for(int i = K + 1; i <= N; i++) { Add(max(I[A[i - K]] - K + 1, 1), min(I[A[i - K]], N - K + 1), -1); // cout << ST[1].mx << ' ' << ST[1].cnt << '\n'; Add(max(I[A[i]] - K + 1, 1), min(I[A[i]], N - K + 1), +1); // cout << ST[1].mx << ' ' << ST[1].cnt << '\n'; MAP[ST[1].mx] += ST[1].cnt; } cout << MAP.rbegin()->first << ' ' << MAP.rbegin()->second << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...