#include <bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
int t[1000005];
int z[1000005];
int base=31;
int mod=1e9+7;
int mu[1000005];
int val;
vector <int> v;
struct node{
      int val,cnt;
};
node f[4000005];
node combine(node a,node b){
     node res;
     res.cnt=a.cnt+b.cnt;
     res.val=(a.val+b.val*mu[a.cnt]%mod)%mod;
     return res;
}
void update(int id,int l,int r,int pos,pair<int,int> val){
    if (l==r){
        f[id].val=val.first;
        f[id].cnt=val.second;
        return;
    }
    int mid=(l+r)/2;
    if (pos<=mid){
        update(id*2,l,mid,pos,val);
    }else{
        update(id*2+1,mid+1,r,pos,val);
    }
    f[id]=combine(f[id*2],f[id*2+1]);
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> a >> b;
    for (int i=1;i<=a;i++){
         cin >> t[i];
    }
    for (int i=1;i<=b;i++){
         cin >> z[i];
         v.push_back(z[i]);
    }
    sort(v.begin(),v.end());
    for (int i=1;i<=b;i++){
         z[i]=lower_bound(v.begin(),v.end(),z[i])-v.begin()+1;
    }
    mu[0]=1;
    int preres=0;
    for (int i=1;i<=a;i++){
         mu[i]=(mu[i-1]*base)%mod;
         preres=(preres+mu[i-1])%mod;
         val=(val+(mu[i-1]*t[i]))%mod;
    }
    vector <int> res;
    for (int i=1;i<=b;i++){
         pair<int,int> pre={i,1};
         update(1,1,b,z[i],pre);
         if (i>a){
             pre={0,0};
             update(1,1,b,z[i-a],pre);
         }
         if (i>=a){
//             cout << "ok" << "\n";
             if (f[1].val==val){
                 res.push_back(i-a+1);
             }
             val=(val+preres)%mod;
         }
    }
    cout << res.size() << "\n";
    for (auto p:res){
         cout << p << " ";
    }
    return 0;
}
| # | 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... |