#include <bits/stdc++.h>
using namespace std;
// Function to convert a sequence to relative order
vector<int> relative_order(const vector<int>& seq) {
int n = seq.size();
vector<int> order(n);
vector<int> sorted = seq;
sort(sorted.begin(), sorted.end());
unordered_map<int,int> rank;
for(int i=0;i<n;i++) rank[sorted[i]] = i;
for(int i=0;i<n;i++) order[i] = rank[seq[i]];
return order;
}
bool is_isomorphic(const vector<int>& a, const vector<int>& b) {
int n = a.size();
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if((a[i]<a[j]) != (b[i]<b[j])) return false;
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
vector<int> s(n), h(m);
for(int i=0;i<n;i++) cin >> s[i];
for(int i=0;i<m;i++) cin >> h[i];
// Pattern as relative order
vector<int> pattern(n);
for(int i=0;i<n;i++) pattern[s[i]-1] = i;
vector<int> result;
for(int i=0;i<=m-n;i++) {
vector<int> window(h.begin()+i, h.begin()+i+n);
if(relative_order(window) == pattern)
result.push_back(i+1); // 1-based index
}
cout << result.size() << "\n";
for(int idx : result) cout << idx << " ";
if(!result.empty()) cout << "\n";
}
# | 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... |