Submission #1162539

#TimeUsernameProblemLanguageResultExecution timeMemory
1162539simona1230Lottery (CEOI18_lot)C++20
35 / 100
557 ms8720 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][105];
int ans2[10001][105];
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...