Cod sursa(job #2401835)

Utilizator ptudortudor P ptudor Data 10 aprilie 2019 09:30:36
Problema Secv Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("secv.in");
ofstream out("secv.out");
int maxval=-1;
int n,k,s,p,a[1000005],sum_part[1000005];
deque <int> q;
int calc(int x)
{
    int K2=k+1;
    return sum_part[x]-sum_part[x-K2];
}
int main()
{int i,j,top,sum=0,counter=0,val;///input
    in>>p>>n>>k>>s;
    for (i=1;i<=n;i++)in>>a[i],maxval=max(a[i],maxval);
    ///rezolvam cerinta 1
    if (p==1)
    {
        top=0,counter=0;
        for (i=1;i<=n;i++)
        {
            top++;
            sum_part[top]=a[i]+sum_part[top-1];
            if (top>=k){
                sum=sum_part[top]-sum_part[top-k];
                if (sum>s)
                    top-=k,
                    counter++;
            }

        }
        out<<counter<<"\n";
    }
    ///cerinta 2
    else
    {
        for (i=1;i<=n;i++)sum_part[i]=a[i]+sum_part[i-1];
        int K2=k+1;
        for (i=1;i<=n;i++)
        {
            if (i+K2-1<=n){
                sum=sum_part[i+K2-1]-sum_part[i-1];
                while ((!q.empty())&&sum>calc(q.back()))
                    q.pop_back();
                q.push_back(i+K2-1);
            }
            while (q.front()<i)
                q.pop_front();
            if (calc(q.front())-a[i]>s)
                counter++;
        }
        out<<counter<<"\n";
    }
    out.close();
    in.close();
    return 0;
}