Submission #1204573

#TimeUsernameProblemLanguageResultExecution timeMemory
1204573loomLottery (CEOI18_lot)C++20
100 / 100
247 ms12336 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 5e18
#define nl '\n'

inline void solve(){
   int n, l;
   cin>>n>>l;
   int a[n];
   for(int i=0; i<n; i++) cin>>a[i];

   int q;
   cin>>q;
   int qry[q];
   int ans[q][n];
   
   for(int i=0; i<q; i++) cin>>qry[i];

   vector<int> ldp(n), dp(n), pre(l+1);

   for(int j=0; j+l-1<n; j++){
      for(int k=0; k<l; k++){
         if(a[k] != a[j+k]) ldp[j]++;
      }
      pre[ldp[j]]++;
   }

   for(int j=1; j<=l; j++) pre[j] += pre[j-1];
   for(int j=0; j<q; j++) ans[j][0] = pre[qry[j]];

   for(int i=1; i+l-1<n; i++){
      dp[0] = 0;
      for(int k=0; k<l; k++){
         if(a[i+k] != a[k]) dp[0]++;
      }

      fill(pre.begin(), pre.end(), 0);
      pre[dp[0]]++;

      for(int j=1; j+l-1<n; j++){
         dp[j] = ldp[j-1] - (a[i-1] != a[j-1]) + (a[i+l-1] != a[j+l-1]);
         pre[dp[j]]++;
      }

      for(int j=1; j<=l; j++) pre[j] += pre[j-1];
      for(int j=0; j<q; j++) ans[j][i] = pre[qry[j]];

      swap(ldp, dp);
   }

   for(int i=0; i<q; i++){
      for(int j=0; j+l-1<n; j++) cout<<ans[i][j]-1<<" ";
      cout<<nl;
   }
}

signed main(){
   ios_base::sync_with_stdio(0);
   cin.tie(NULL);cout.tie(NULL);

   int t = 1;
   //cin>>t;
   while(t--) 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...