Submission #1089850

#TimeUsernameProblemLanguageResultExecution timeMemory
1089850juicyMatching (CEOI11_mat)C++17
0 / 100
102 ms21792 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "debug.h" #else #define debug(...) 42 #endif const int N = 1e6 + 5; int n, m; int pos[N], a[2 * N], nxt[N], prv[N], lt[N], rt[N], kmp[2 * N]; bool check(int l, int i) { return l != n && a[i - lt[l + 1]] <= a[i] && a[i - rt[l + 1]] >= a[i]; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; for (int i = 1; i <= n; ++i) { cin >> pos[i]; a[pos[i]] = i; prv[i] = i - 1; nxt[i] = i + 1; } for (int i = 1; i <= m; ++i) { cin >> a[i + n]; } for (int i = n; i; --i) { int l = prv[a[i]], r = nxt[a[i]]; nxt[l] = r; if (r != n + 1) { rt[i] = i - pos[r]; } if (l) { lt[i] = i - pos[l]; } prv[r] = l; } vector<int> res; for (int i = 2; i <= m + n; ++i) { int j = kmp[i - 1]; while (j && !check(j, i)) { j = kmp[j - 1]; } kmp[i] = j + check(j, i); if (kmp[i] == n) { res.push_back(i - 2 * n + 1); } } cout << res.size() << "\n"; for (int x : res) { cout << x << " "; } 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...
#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...