Submission #1187174

#TimeUsernameProblemLanguageResultExecution timeMemory
1187174aminjon__Matching (CEOI11_mat)C++17
100 / 100
838 ms39548 KiB
#include <bits/stdc++.h> #define all(x) (x).begin(), (x).end() #define endl '\n' typedef unsigned int uint; typedef int ll; typedef long double ld; typedef unsigned long long ull; using namespace std; const ll maxn = 1e6; const ll modd = 1e9 + 7; const ll p1 = 37; ll P1[maxn + 1]; ll f_H1(vector<ll> &A) { ll res = 0; for (int i = 0; i < A.size(); i++) { res += (1LL*A[i]%modd * P1[i]) % modd; res %= modd; } return res; } ll h1[2+maxn*4]; ll sz[2+maxn*4]; void update(ll x, ll lx, ll rx, ll need, ll val) { if (lx > need || rx < need) { return; } if (lx == rx) { h1[x] = val%modd; sz[x] = !!val; return; } ll mid = (lx + rx) / 2; update(x + x, lx, mid, need, val); update(x + x + 1, mid + 1, rx, need, val); h1[x] = (h1[x + x] + (1LL*P1[sz[x + x]] * h1[x + x + 1] % modd)) % modd; sz[x] = sz[x + x] + sz[x + x + 1]; } signed main() { ios_base::sync_with_stdio(NULL); cin.tie(NULL); cout.tie(NULL); ll n, m; cin >> n >> m; P1[0] = 1; ll add1 = 1, add2 = 1; for (int i = 1; i <= 1 + n; i++) { P1[i] = (1LL*P1[i - 1] * p1) % modd; if (i < n) { add1 = (1LL*add1 + P1[i]) % modd; } } vector<ll> a(n), b(m); vector < pair<ll,ll> > P(m); for (int i = 0; i < n; i++) cin >> a[i]; for (int j = 0; j < m; j++) { cin >> b[j]; P[j] = {b[j] , j}; } sort(all(P)); for(int i = 0 ;i < m;i++){ b[P[i].second] = i+1; } ll Hx1 = f_H1(a); ll kol = 0; vector<ll> ans; for (int j = 0; j < m; j++) { update(1, 1, m, b[j], j + 1); if (sz[1] > n) { update(1, 1, m, b[j - n], 0); Hx1 = (1LL*Hx1 + add1) % modd; } if (sz[1] < n) continue; if (h1[1] == Hx1) { ans.push_back(j - n + 2); } } cout << ans.size() << endl; for (auto g : ans) cout << g << ' '; 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...