Submission #1251399

#TimeUsernameProblemLanguageResultExecution timeMemory
1251399minhpkLottery (CEOI18_lot)C++20
100 / 100
476 ms9148 KiB
#include <bits/stdc++.h>

using namespace std;
int a,b;
int  z[1000005];
vector<vector<short>> f;
pair<int,int> q[1005];
int pos[1000005];
vector<vector<short>> res;
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> a >> b;
    for (int i=1;i<=a;i++){
         cin >> z[i];
    }
    int c;
    cin >> c;
    for (int i=1;i<=c;i++){
         cin >> q[i].first;
         q[i].second=i;
    }
    sort(q+1,q+1+c);
    int cur=0;
    for (int i=1;i<=b;i++){
         pos[i]=1e6;
    }
    for (int i=1;i<=c;i++){
         while (cur<=b && cur<=q[i].first){
             pos[cur]=i;
             cur++;
         }
    }
//    cerr << "ok" << "\n";
    f.resize(a-b+2,vector<short>(c+1));
    res.resize(a-b+2,vector<short>(c+1));
    for (int i=2;i+b-1<=a;i++){
         int sta=1;
         int sta1=i;
         int cur=0;
         for (int j=0;j<b;j++){
              if (z[j+sta]!=z[j+sta1]){
                  cur++;
              }
         }
         if (pos[cur]<=c){
             f[sta][pos[cur]]++;
             f[sta1][pos[cur]]++;
         }

         for (int j=i+b;j<=a;j++){
              if (z[sta]!=z[sta1]){
                  cur--;
              }
              sta++;
              sta1++;
              if (z[sta+b-1]!=z[sta1+b-1]){
                  cur++;
              }
              if (pos[cur]<=c){
                 f[sta][pos[cur]]++;
                 f[sta1][pos[cur]]++;
             }
         }
    }
//    cerr << "ok" << "\n";
    for (int i=1;i<=c;i++){
         if (i>1){
             for (int j=1;j<=a-b+1;j++){
                  f[j][i]+=f[j][i-1];
             }
         }
         for (int j=1;j<=a-b+1;j++){
              res[j][q[i].second]=f[j][i];
         }
    }
//    cerr << "ok" << "\n";
    for (int i=1;i<=c;i++){
         for (int j=1;j<=a-b+1;j++){
              cout << res[j][i] << " ";
         }
         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...