#include<bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("my solution")
//#define int long long
#define ll long long
#define nlp nullptr
#define btc __builtin_popcount
#define sht int_fast16_t
#define ld double
#define fi first
#define se second
using namespace std;
const int N = 3e5 + 5 , K = 8 , B = 369;
const int md = 998244353;
const int inf = 1e9;
const long double eps = 1e-8;
const bool stress = false;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
bool chk(vector<int> &a , vector<int> &b , int l , int r){
if(r - l + 1 > a.size()) return false;
for(int i = 1;i < (r - l + 1); ++ i){
if(l + a[i - 1] > r or l + a[i] > r) continue ;
if(b[l + a[i - 1]] > b[l + a[i]]) return false;
}
return true;
}
vector<int> cmp(vector<int> s , vector<int> t){
int n = s.size() , m = t.size() , suf[n + 1] = {} , sf = 0;
vector<int> ans;
for(int i = 1;i < n; ++ i){
while(sf and ! chk(s , s , i - sf , i)) sf = suf[sf - 1];
if(chk(s , s , i - sf , i)) sf ++;
suf[i] = sf;
}
//cout << chk(s , s , 2 , 3);
s.push_back(-1);
sf = 0;
for(int i = 0;i < m; ++ i){
while(sf and ! chk(s , t , i - sf , i)) sf = suf[sf - 1];
if(chk(s , t , i - sf , i)) sf ++;
//cout << sf << ' ';
if(sf == n) ans.push_back(i - n + 1);
}
//cout << chk(s , t , 1 , 5);
return ans;
}
void solve(){
int n , m;
cin >> n >> m;
vector<int> s(n) , t(m);
for(int i = 0;i < n; ++ i){
cin >> s[i];
s[i] --;
}
for(int i = 0;i < m; ++ i) cin >> t[i];
vector<int> ans = cmp(s , t);
cout << ans.size() << '\n';
for(auto to : ans) cout << to + 1 << ' ';
}
main()
{
//217
//freopen("seating.in", "r", stdin) , freopen("seating.out" , "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int T = 1;
//cin >> T;
while(T --)
{
solve();
cout << '\n';
}
}
Compilation message (stderr)
mat.cpp:3:35: warning: bad option '-fmy solution' to pragma 'optimize' [-Wpragmas]
3 | #pragma GCC optimize("my solution")
| ^
mat.cpp:19:57: warning: bad option '-fmy solution' to attribute 'optimize' [-Wattributes]
19 | bool chk(vector<int> &a , vector<int> &b , int l , int r){
| ^
mat.cpp:27:46: warning: bad option '-fmy solution' to attribute 'optimize' [-Wattributes]
27 | vector<int> cmp(vector<int> s , vector<int> t){
| ^
mat.cpp:47:12: warning: bad option '-fmy solution' to attribute 'optimize' [-Wattributes]
47 | void solve(){
| ^
mat.cpp:60:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
60 | main()
| ^~~~
mat.cpp:60:6: warning: bad option '-fmy solution' to attribute 'optimize' [-Wattributes]
60 | main()
| ^
# | 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... |