This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10;
int a[maxn], b[maxn], h[maxn];
int fen[maxn];
int f[maxn];
int get(int idx){
int ret = 0;
for (; idx; idx -= idx & -idx)
ret += fen[idx];
return ret;
}
void add(int idx, int val){
for (; idx < maxn; idx += idx & -idx)
fen[idx] += val;
}
int main(){
ios_base::sync_with_stdio(false);
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++){
int x;
cin >> x;
a[x - 1] = i;
}
vector<int> cmp;
for (int i = 0; i < m; i++){
cin >> h[i];
cmp.push_back(h[i]);
}
sort(cmp.begin(), cmp.end());
for (int i = 0; i < m; i++)
h[i] = lower_bound(cmp.begin(), cmp.end(), h[i]) - cmp.begin() + 1;
for (int i = 0; i < n; i++){
add(a[i], +1);
b[i] = get(a[i]);
}
for (int i = 0; i < n; i++)
add(a[i], -1); // vitex
f[0] = f[1] = 0;
int k = 0;
for (int i = 1; i < n; i++){
add(a[i], +1);
int now = get(a[i]);
while (k > 0 and b[k] != now){
for (int t = i - k; t < i - f[k]; t++)
add(a[t], -1);
k = f[k];
now = get(a[i]);
}
k += (b[k] == now);
f[i + 1] = k;
}
memset(fen, 0, sizeof fen);
vector<int> ans;
k = 0;
for (int i = 0; i < m; i++){
add(h[i], +1);
int now = get(h[i]);
while (k > 0 and b[k] != now){
for (int t = i - k; t < i - f[k]; t++)
add(h[t], -1);
k = f[k];
now = get(h[i]);
}
k += (b[k] == now);
if (k == n){
ans.push_back(i - k + 1);
for (int t = i - k + 1; t < i - f[k] + 1; t++)
add(h[t], -1);
k = f[k];
}
}
cout << ans.size() << '\n';
for (auto it : ans)
cout << it + 1 << " ";
cout << endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |