제출 #1154309

#제출 시각아이디문제언어결과실행 시간메모리
1154309abcdxyz123Matching (CEOI11_mat)C++17
100 / 100
485 ms34756 KiB
#include<bits/stdc++.h> #define all(x) x.begin(),x.end() #define pi pair<int,int> #define fi first #define se second #define maxn 1000005 using namespace std; const int Base=13; int n,m; int s[maxn]; int h[maxn]; int pw[maxn]; struct { pi s[2*maxn]; pi Merge(pi &X,pi &Y) { pi Z; if(X.se==0)return Y; if(Y.se==0)return X; Z.fi=X.fi*pw[Y.se]+Y.fi; Z.se=X.se+Y.se; return Z; } void update(int p, pi val) { for(s[p+=m]=val;p>>=1;) { s[p]=Merge(s[p<<1],s[p <<1|1]); } } int get(int l,int r) { pi resL = {0,0}; pi resR = {0,0}; for (l += m, r += m + 1; l < r; l >>= 1, r >>= 1) { if (l & 1) resL=Merge(resL, s[l++]); if (r & 1) resR=Merge(s[--r],resR); } return Merge(resL,resR).fi; } /// } Hash; int N; int tmp[maxn]; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m; pw[0]=1; for(int i=1; i<=m; i++) { pw[i]=pw[i-1]*Base; } int pattern=0; int add=0; for(int i=1; i<=n; i++) { cin>>s[i]; pattern=pattern*Base+s[i]; add+=pw[n-i]; } vector<int>val; for(int i=1; i<=m; i++) { cin>>h[i]; tmp[i]=h[i]; } sort(tmp+1,tmp+m+1); for(int i=1; i<=m; i++) { h[i]=lower_bound(tmp+1,tmp+m+1,h[i])-tmp; } for(int i=1; i<n; i++)Hash.update(h[i],{i,1}); for(int i=n; i<=m; i++) { Hash.update(h[i],{i,1}); if(pattern==Hash.get(1,m))tmp[++N]=i-n+1; Hash.update(h[i-n+1],{0,0}); pattern+=add; } cout<<N<<'\n'; for(int i=1; i<=N; i++)cout<<tmp[i]<<' '; return 0; } /* Vi tri -> Thu tu gia tri */
#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...