Submission #1282774

#TimeUsernameProblemLanguageResultExecution timeMemory
1282774julia_08Lottery (CEOI18_lot)C++20
0 / 100
1 ms572 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 2e3 + 10;
const int MAXQ = 110;

int a[MAXN];

int ans[MAXN][MAXQ];

int main(){
  cin.tie(0)->sync_with_stdio(0);

  int n, l; cin >> n >> l;

  for(int i=1; i<=n; i++) cin >> a[i];

  int q; cin >> q;

  vector<pair<int, int>> queries(q);

  for(int i=0; i<q; i++){
    int k; cin >> k;
    queries[i] = {l - k, i};
  }

  sort(queries.begin(), queries.end());

  for(int d=1; d<n; d++){
    
    int p = 0;

    int sum = 0, id = -1;

    for(int i=1; i<=(n - l + 1 - d); i++){

      while(p < i + l - 1){

        p ++;

        if(p + d <= n) sum += (a[p] == a[p + d]);
        if(id + 1 < q) if(sum >= queries[id + 1].first) id ++;

      }

      if(id >= 0){
        ans[i][id] ++;
        ans[i + d][id] ++;
      }
  
      if(i + d <= n) sum -= (a[i] == a[i + d]); 
      if(id >= 0) if(sum < queries[id].first) id --;

    }

  }

  for(int i=1; i<=n; i++){
    for(int j=(q - 2); j>=0; j--){
      ans[i][j] += ans[i][j + 1];
    }
  }

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

  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...