Submission #1246482

#TimeUsernameProblemLanguageResultExecution timeMemory
1246482JovicaLottery (CEOI18_lot)C++20
100 / 100
1174 ms8204 KiB
#include <bits/stdc++.h>

using namespace std;
map<int,int> prevod;

void kompres(set<int> s)
{
    int p = 0;
    for (auto a: s){
        prevod[a] = p;
        p++;
    }
}

int main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int n,l;
    cin>>n>>l;
    vector<int> v(n);
    for (int i=0;i<n;i++) cin>>v[i];

    int q;
    cin>>q;
    set<int> s;
    vector<int> redosled;
    int kolku_razlicni = 0;
    for (int i=0;i<q;i++)
    {
        int a;
        cin>>a;
        if (s.count(a) == 0) kolku_razlicni++;
        s.insert(a);
        redosled.push_back(a);
    }

    kompres(s);

    vector<vector<int> > ans(kolku_razlicni);
    for (int i=0;i<kolku_razlicni;i++) ans[i].resize(n-l+1,0);

    /*cout<<" ans: ";
    for (int i=0;i<ans.size();i++)
    {
        for (auto a: ans[i]) cout<<a<<" ";
        cout<<endl;
    }
    cout<<"-"<<endl;*/
    s.insert(1e5);

    for (int d = 1;d+l<=n;d++)
    {
        int raz = 0;
        for (int i=0;i<l;i++) if (v[i] != v[i+d]) raz++;

        for (int p1=0,p2=d;p2+l<=n;p1++,p2++)
        {
            if (p1>0)
            {
                if (v[p1-1] != v[p2-1]) raz--;
                if (v[p1+l-1] != v[p2+l-1]) raz++;
            }
            //cout<<"od "<<p1<<" do "<<p1+l-1<<" i od "<<p2<<" do "<<p2+l-1<<" ima "<<raz<<" razliki\n";

            int kade = *s.lower_bound(raz);
            //cout<<"kade = "<<kade<<endl;
            if (kade == 1e5) continue;
            kade = prevod[kade];
            ans[kade][p1] ++;ans[kade][p2] ++;
        }
    }

    for (int i=0;i+1<ans.size();i++)
    {
        for (int j=0;j<ans[i].size();j++) ans[i+1][j] += ans[i][j];
    }

    for (auto a: redosled)
    {
        int p = prevod[a];
        for (auto x: ans[p]) cout<<x<<" ";
        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...