제출 #1257286

#제출 시각아이디문제언어결과실행 시간메모리
1257286minhpkMatching (CEOI11_mat)C++20
100 / 100
902 ms64704 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...