Cod sursa(job #2506669)

Utilizator PopescuAndreiAlexandruPopescu Andrei Alexandru PopescuAndreiAlexandru Data 8 decembrie 2019 16:47:22
Problema Zombie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin("zombie.in");
ofstream fout("zombie.out");

#define nmax 1000005

int n,d,k,v[nmax],st=1,nr=0,ans,caut;

long long Sum=0;

void Read()
{
    fin>>d>>n>>k;
    for(int i=1;i<=n;i++)
        fin>>v[i];
}

int Search(int x, int st)
{
    int sol=-1,left=st,right=n;
    while(left<=right)
    {
        int mid=(left+right)/2;
        if(v[mid]==x)
        {
            sol=mid;
            break;
        }
        if(v[mid]>x)
            right=mid-1;
        if(v[mid]<x)
            left=mid+1;
    }
    if(sol<0)
    {
        sol=left;
        if(sol<st)
            sol++;
        if(sol>n)
            sol--;
        if(v[sol]>x)
            sol--;
    }
    return sol;
}

void Sol()
{
    while(st<=n)
    {
        caut=v[st]+d;
        ans=Search(caut,st);
        nr=ans-st+1;
        st=ans+1;
        Sum+=min(ans,k);
    }
    fout<<Sum<<'\n';
}

int main()
{
    Read();
    Sol();
}