제출 #524792

#제출 시각아이디문제언어결과실행 시간메모리
524792DeepessonLottery (CEOI18_lot)C++17
100 / 100
978 ms10332 KiB
#include <bits/stdc++.h>
#define MAX 11000
int ans[MAX][155];
int valores[155];
int difs=0;
int addval(int u){
    int l=0,r=difs-1;
    while(l<r){
        int m = (l+r)/2;
        if(valores[m]>=u){
            r=m;
        }else l=m+1;
    }
    return l;
}
int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    int N,L;
    std::cin>>N>>L;
    int array[N];
    for(auto&x:array)std::cin>>x;
    int Q;
    std::cin>>Q;
    std::vector<int> vec;
    std::map<int,int> mapa;
    int cur=0;
    std::vector<int> v;v.push_back(0);v.push_back(1e9);
    for(int i=0;i!=Q;++i){
        int x;
        std::cin>>x;
        v.push_back(x);
        vec.push_back(x);
    }
    std::sort(v.begin(),v.end());
    for(auto&x:v){
        if(mapa.find(x)==mapa.end()){
            valores[cur]=x;
            mapa[x]=cur;
            ++cur;
            ++difs;
        }
    }

    for(int j=1;j!=N;++j){
        if(j+L>N)break;
        int count=0;
        int cur1=0,cur2=j;
        for(int i=0;i!=L;++i){
            count+=(array[cur1]!=array[cur2]);
            ++cur1;
            ++cur2;
        }
        assert(cur2<=N&&cur1<=N);
        {
            int k = addval(count);
            ans[cur1-L][k]++;
            ans[cur2-L][k]++;
        }
        while(cur2!=N){
            count-=(array[cur1-L]!=array[cur2-L]);
            count+=(array[cur1]!=array[cur2]);
            ++cur1;++cur2;
            {
                int k =  addval(count);
                ans[cur1-L][k]++;
                ans[cur2-L][k]++;
            }
        }
    }

    for(int i=0;i!=N;++i){
        int sum=0;
        for(int j=0;j!=104;++j){
            sum+=ans[i][j];
            ans[i][j]=sum;
        }
    }
    for(auto&x:vec){
        for(int i=0;i<N-L+1;++i){
            std::cout<<ans[i][mapa[x]]<<" ";
        }
        std::cout<<"\n";
    }
}
#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...