#include<bits/stdc++.h>
#define ll long long
using namespace std;
int N,K,M,niz[1000005],oduz[1000005],kol[1000005],H,H2;
int MOD=1000000009,b=1000003,stepen[1000005];
vector<vector<int>> on,off;
vector<int> R;
struct slog{
int sv,poz;
};
vector<slog> sniz;
bool posv(slog a,slog b){
return a.sv<b.sv;
}
struct cvor{
int cnt,mlt,rez;
bool on;
};
vector<cvor> st;
vector<int> fwt;
cvor opr(cvor a,cvor b){
if(a.on==false)
return b;
if(b.on==false)
return a;
a.rez=(a.rez+b.rez+(ll)a.cnt*b.mlt)%MOD;
a.mlt+=b.mlt;
if(a.mlt>=MOD)
a.mlt-=MOD;
a.cnt+=b.cnt;
return a;
}
void update(int gde,bool akt){
st[gde].on=akt;
gde/=2;
while(gde){
st[gde]=opr(st[gde*2],st[gde*2+1]);
gde/=2;
}
}
void fadd(int poz,int kol){
for(int i=poz;i<=M;i+=i&(-i))
fwt[i]+=kol;
return;
}
int fsum(int gde){
int ret=0;
for(int i=gde;i>=1;i-=i&(-i))
ret+=fwt[i];
return ret;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N>>M;
K=1;
while(K<2*M)
K<<=1;
on.resize(M+5);
off.resize(M+5);
sniz.resize(M+5);
fwt.resize(M+5);
stepen[0]=1;
for(int i=1;i<=M;i++)
stepen[i]=(stepen[i-1]*(ll)b)%MOD;
for(int i=1;i<=N;i++)
cin>>niz[i];
for(int i=1;i<=N;i++)
sniz[niz[i]].sv=i;
for(int i=1;i<=N;i++)
niz[i]=sniz[i].sv;
for(int i=1;i<=N;i++){
fadd(niz[i],1);
H=(H+((ll)i-fsum(niz[i]))*stepen[i])%MOD;
}
for(int i=1;i<=M;i++)
cin>>niz[i];
for(int i=1;i<=M;i++){
sniz[i].poz=i;
sniz[i].sv=niz[i];
}
sort(sniz.begin()+1,sniz.begin()+1+M,posv);
for(int i=1;i<=M;i++)
niz[sniz[i].poz]=i;
for(int i=1;i<=M;i++)
fwt[i]=0;
for(int i=1;i<=M;i++){
fadd(niz[i],1);
kol[i]=i-fsum(niz[i]);
}
fwt.clear();
fwt.shrink_to_fit();
int upok=K;
for(int i=1;i<=M;i++)
niz[i]=sniz[i].poz;
sniz.clear();
sniz.shrink_to_fit();
st.resize(K+K);
for(int i=M;i>=1;i--){
st[upok].cnt=1;
st[upok].mlt=0;
st[upok].rez=0;
on[niz[i]].push_back(upok);
upok++;
st[upok].cnt=0;
st[upok].mlt=stepen[niz[i]];
st[upok].rez=0;
st[upok].on=false;
int l=max(1,niz[i]-N);
on[l].push_back(upok);
off[niz[i]].push_back(upok);
upok++;
}
for(int i=1;i<=M;i++){
for(int j=0;j<on[i].size();j++)
update(on[i][j],true);
for(int j=0;j<off[i].size();j++)
update(off[i][j],false);
oduz[i]=st[1].rez;
}
st.clear();
st.shrink_to_fit();
for(int i=1;i<=N;i++)
H2=(H2+(ll)kol[i]*stepen[i])%MOD;
if(H2==H)
R.push_back(1);
for(int i=2;i+N-1<=M;i++){
H=(H*(ll)b)%MOD;
H2-=(ll)kol[i-1]*stepen[i-1]%MOD;
if(H2<0)
H2+=MOD;
H2+=(ll)kol[i+N-1]*stepen[i+N-1]%MOD;
if(H2>=MOD)
H2-=MOD;
int tmp=H2-oduz[i-1];
if(tmp<0)
tmp+=MOD;
if(H==tmp)
R.push_back(i);
}
cout<<R.size()<<"\n";
for(int i=0;i<R.size();i++)
cout<<R[i]<<" ";
cout<<"\n";
return 0;
}
Compilation message
mat.cpp: In function 'int main()':
mat.cpp:121:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
121 | for(int j=0;j<on[i].size();j++)
| ~^~~~~~~~~~~~~
mat.cpp:123:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
123 | for(int j=0;j<off[i].size();j++)
| ~^~~~~~~~~~~~~~
mat.cpp:148:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
148 | for(int i=0;i<R.size();i++)
| ~^~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
328 KB |
Output is correct |
4 |
Correct |
0 ms |
340 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
596 KB |
Output is correct |
2 |
Correct |
1 ms |
472 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
15 ms |
5028 KB |
Output is correct |
2 |
Correct |
14 ms |
4752 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
15 ms |
5048 KB |
Output is correct |
2 |
Correct |
14 ms |
5088 KB |
Output is correct |
3 |
Correct |
2 ms |
980 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
145 ms |
39664 KB |
Output is correct |
2 |
Correct |
135 ms |
41160 KB |
Output is correct |
3 |
Correct |
309 ms |
42208 KB |
Output is correct |
4 |
Correct |
308 ms |
42184 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
170 ms |
41984 KB |
Output is correct |
2 |
Correct |
295 ms |
41988 KB |
Output is correct |
3 |
Correct |
169 ms |
41392 KB |
Output is correct |
4 |
Correct |
145 ms |
41988 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
174 ms |
41736 KB |
Output is correct |
2 |
Correct |
153 ms |
41784 KB |
Output is correct |
3 |
Correct |
216 ms |
41648 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
114 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
253 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
92 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
92 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |