제출 #1240707

#제출 시각아이디문제언어결과실행 시간메모리
1240707dprtoMatching (CEOI11_mat)C++20
100 / 100
150 ms35624 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define Nando signed #define demo main #define F(i, l, r) for(ll i = l; i <= r; ++i) #define E(i, l, r) for(int i = l; i >= r; --i) #define MASK(i) (1 << (i)) #define BIT(x, i) (((x) >> (i)) & 1) #define eb emplace_back const ll mod = 1e9 + 7; const int ars = 1e6 + 5; const int ii = 1e9; const ll il = 1e18; int n, m, idx[ars], s[2 * ars], lt[ars], rt[ars], kmp[2 * ars]; struct linked_list { int n, *l, *r; linked_list(int n_) : n(n_), l(new int[n_ + 10]), r(new int[n_ + 10]) { F(i, 1, n) { l[i] = i - 1; r[i] = i + 1; } } void del(int i) { int l_ = l[i], r_ = r[i]; r[l_] = r_; l[r_] = l_; } }; bool check(int i, int j) { if(i == n + 1) return false; if(lt[i] and s[j - i + lt[i]] > s[j]) return false; if(rt[i] and s[j + rt[i] - i] < s[j]) return false; return true; } Nando demo() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; F(i, 1, n) { cin >> idx[i]; s[idx[i]] = i; } s[n + 1] = 0; F(i, n + 2, n + 1 + m) cin >> s[i]; linked_list lk(n); E(i, n, 1) { lt[i] = idx[lk.l[s[i]]]; rt[i] = idx[lk.r[s[i]]]; lk.del(s[i]); } vector<int> res; int len; F(i, 2, n + m + 1) { if(i == n + 1) continue; len = kmp[i - 1]; while(len > 0 and !check(len + 1, i)) len = kmp[len]; if(check(len + 1, i)) kmp[i] = len + 1; if(i > n + 1 and kmp[i] == n) res.eb(i - 2 * n); } cout << res.size() << "\n"; for(auto x : res) cout << x << " "; cout << "\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...
#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...