#include <bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
#define mp make_pair
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int readint(){
int x=0,f=1; char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
const int B=77777;
const int md=1e9+7;
int ckmul(int a,int b){return (ll)a*b%md;}
int ckadd(int a,int b){return a+b>=md?a+b-md:a+b;}
int cksub(int a,int b){return a>=b?a-b:a-b+md;}
int qpow(int a,int b){int r=1;while(b){if(b&1)r=ckmul(r,a);a=ckmul(a,a);b>>=1;}return r;}
int ckdiv(int a,int b){return ckmul(a,qpow(b,md-2));}
int n,m,p[1000005],a[1000005],pw[1000005],pp[1000005];
void compress(){
vector<int> xs;
for(int i=1;i<=m;i++) xs.pb(a[i]);
sort(xs.begin(),xs.end());
xs.erase(unique(xs.begin(),xs.end()),xs.end());
for(int i=1;i<=m;i++) a[i]=(int)(lower_bound(xs.begin(),xs.end(),a[i])-xs.begin())+1;
}
namespace cnt{
int fenw[1000005];
void clr(){for(int i=0;i<1000005;i++)fenw[i]=0;}
void upd(int p,int v){for(;p<1000005;p+=p&-p)fenw[p]+=v;}
int get(int p){int r=0;for(;p>0;p-=p&-p)r+=fenw[p];return r;}
int get(int l,int r){if(l>r)return 0;return get(r)-get(l-1);}
};
namespace sum{
int fenw[1000005];
void clr(){for(int i=0;i<1000005;i++)fenw[i]=0;}
void upd(int p,int v){for(;p<1000005;p+=p&-p)fenw[p]=ckadd(fenw[p],v);}
int get(int p){int r=0;for(;p>0;p-=p&-p)r=ckadd(r,fenw[p]);return r;}
int get(int l,int r){if(l>r)return 0;return cksub(get(r),get(l-1));}
}
int main(){
n=readint(); m=readint();
for(int i=1;i<=n;i++) p[i]=readint();
for(int i=1;i<=m;i++) a[i]=readint();
for(int i=1;i<=n;i++) pp[p[i]]=i;
for(int i=1;i<=n;i++) p[i]=pp[i];
compress();
pw[0]=1;
for(int i=1;i<=m;i++) pw[i]=ckmul(pw[i-1],B),assert(pw[i]==qpow(B,i));
ll hsh=0;
for(int i=1;i<=n;i++){
hsh=ckadd(hsh,sum::get(p[i],n));
cnt::upd(p[i],1);
sum::upd(p[i],pw[i]);
}
cnt::clr(); sum::clr();
ll cur=0;
for(int i=1;i<=n;i++){
cur=ckadd(cur,sum::get(a[i],m));
cnt::upd(a[i],1);
sum::upd(a[i],pw[i]);
}
vector<int> res;
if(hsh==cur) res.pb(1);
for(int i=n+1;i<=m;i++){
cur=cksub(cur,ckmul(pw[i-n],cnt::get(1,a[i-n]-1)));
cnt::upd(a[i-n],-1);
sum::upd(a[i-n],cksub(0,pw[i-n]));
cur=ckadd(cur,sum::get(a[i],m));
cnt::upd(a[i],1);
sum::upd(a[i],pw[i]);
if(ckdiv(cur,pw[i-n])==hsh) res.pb(i-n+1);
}
printf("%d\n",res.size());
for(int i=0;i<res.size();i++) printf("%d ",res[i]);
return 0;
}
Compilation message
mat.cpp: In function 'int main()':
mat.cpp:88:11: warning: format '%d' expects argument of type 'int', but argument 2 has type 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wformat=]
88 | printf("%d\n",res.size());
| ~^ ~~~~~~~~~~
| | |
| int std::vector<int>::size_type {aka long unsigned int}
| %ld
mat.cpp:89:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
89 | for(int i=0;i<res.size();i++) printf("%d ",res[i]);
| ~^~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
14936 KB |
Output is correct |
2 |
Correct |
2 ms |
14940 KB |
Output is correct |
3 |
Correct |
3 ms |
14940 KB |
Output is correct |
4 |
Correct |
2 ms |
14940 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
14876 KB |
Output is correct |
2 |
Correct |
3 ms |
14940 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
15120 KB |
Output is correct |
2 |
Correct |
10 ms |
15376 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
15228 KB |
Output is correct |
2 |
Correct |
11 ms |
15116 KB |
Output is correct |
3 |
Correct |
4 ms |
15048 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
90 ms |
16388 KB |
Output is correct |
2 |
Correct |
88 ms |
18284 KB |
Output is correct |
3 |
Correct |
109 ms |
19340 KB |
Output is correct |
4 |
Correct |
114 ms |
19184 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
95 ms |
19028 KB |
Output is correct |
2 |
Correct |
119 ms |
19112 KB |
Output is correct |
3 |
Correct |
96 ms |
19360 KB |
Output is correct |
4 |
Correct |
99 ms |
21156 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
99 ms |
19124 KB |
Output is correct |
2 |
Correct |
87 ms |
18720 KB |
Output is correct |
3 |
Correct |
105 ms |
18868 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
553 ms |
31932 KB |
Output is correct |
2 |
Correct |
520 ms |
40404 KB |
Output is correct |
3 |
Correct |
432 ms |
26580 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
474 ms |
33508 KB |
Output is correct |
2 |
Correct |
669 ms |
25928 KB |
Output is correct |
3 |
Correct |
527 ms |
36812 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
530 ms |
28220 KB |
Output is correct |
2 |
Correct |
514 ms |
40636 KB |
Output is correct |
3 |
Correct |
566 ms |
29092 KB |
Output is correct |
4 |
Correct |
350 ms |
38460 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
518 ms |
28616 KB |
Output is correct |
2 |
Correct |
568 ms |
29304 KB |
Output is correct |
3 |
Correct |
221 ms |
23304 KB |
Output is correct |
4 |
Correct |
441 ms |
38416 KB |
Output is correct |