제출 #1162536

#제출 시각아이디문제언어결과실행 시간메모리
1162536simona1230Lottery (CEOI18_lot)C++20
35 / 100
559 ms8400 KiB
#include <bits/stdc++.h> using namespace std; int n,l; int a[200001]; int q; pair<int,int> k[200001]; void read() { cin>>n>>l; for(int i=1;i<=n;i++) cin>>a[i]; cin>>q; for(int i=1;i<=q;i++) { cin>>k[i].first; k[i].second=i; } } int f[200001]; int ans[10001][101]; int ans2[10001][101]; void solve() { sort(k+1,k+q+1); for(int i=0;i<=l+1;i++) f[i]=q+1; for(int i=1;i<=q;i++) f[k[i].first]=i; for(int i=l;i>=0;i--) f[i]=min(f[i],f[i+1]); for(int d=1;d<=n-l;d++) { int cnt=0; for(int i=1;i<=n-l+1;i++) { int j=i+d; if(j+l-1>n)continue; if(i==1) { for(int x=0;x<l;x++) if(a[x+i]!=a[x+j])cnt++; } else { if(a[i-1]!=a[j-1])cnt--; if(a[i+l-1]!=a[j+l-1])cnt++; } ans[i][f[cnt]]++; ans[j][f[cnt]]++; //cout<<i<<" "<<j<<" "<<cnt<<" "<<f[cnt]<<endl; } } for(int i=1;i<=q;i++) { //cout<<i<<" "<<k[i].second<<endl; for(int j=1;j<=n;j++) { if(i)ans[j][i]+=ans[j][i-1]; ans2[j][k[i].second]=ans[j][i]; } } for(int i=1;i<=q;i++) { for(int j=1;j<=n-l+1;j++) { cout<<ans2[j][i]<<" "; } cout<<endl; } } int main() { read(); solve(); 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...