Cod sursa(job #330690)

Utilizator cezarbotolanbotolan cezar cezarbotolan Data 11 iulie 2009 11:31:59
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <cstdio>   
#include <cstring>   
#include <deque>   
#define N 500001   
#define M 4194304   
#define inf 0x3f3f3f3f   
  
using namespace std;   
  
int V[N];   
deque<int> DQ;   
deque<int>::iterator it;   
char S[M];   
  
int main()   
{   
    int n,k,i,poz,maxim=-inf,nr,kont=0,p;   
    freopen("secventa.in","r",stdin);   
    freopen("secventa.out","w",stdout);   
    scanf("%d%d\n",&n,&k);   
    fgets(S,M,stdin);   
    int len=strlen(S);   
    for (i=0; i<len; i++)   
    {   
        nr=0; p=1;   
        if (S[i]=='-')   
        {   
            p=-1;   
            i++;   
        }   
        for (; S[i]>='0' && S[i]<='9'; i++)   
            nr=10*nr+S[i]-'0';   
        V[++kont]=nr*p;   
    }   
  
    for (i=1; i<=n; i++)   
    {   
        while (!DQ.empty() && V[i]<=V[DQ.back()]) DQ.pop_back();   
        DQ.push_back(i);   
        if (DQ.front()<=i-k) DQ.pop_front();   
        if (i>=k && V[DQ.front()]>maxim)   
        {   
            maxim=V[DQ.front()];   
            poz=i;   
        }   
    }   
  
    printf("%d %d %d",poz-k+1,poz,maxim);   
  
    return 0;   
}  
#include <cstdio>
#include <cstring>
#include <deque>
#define N 500001
#define M 4194304
#define inf 0x3f3f3f3f

using namespace std;

int V[N];
deque<int> DQ;
deque<int>::iterator it;
char S[M];

int main()
{
    int n,k,i,poz,maxim=-inf,nr,kont=0,p;
	freopen("secventa.in","r",stdin);
	freopen("secventa.out","w",stdout);
    scanf("%d%d\n",&n,&k);
    fgets(S,M,stdin);
    int len=strlen(S);
    for (i=0; i<len; i++)
    {
        nr=0; p=1;
        if (S[i]=='-')
        {
            p=-1;
            i++;
        }
        for (; S[i]>='0' && S[i]<='9'; i++)
            nr=10*nr+S[i]-'0';
        V[++kont]=nr*p;
    }

    for (i=1; i<=n; i++)
    {
        while (!DQ.empty() && V[i]<=V[DQ.back()]) DQ.pop_back();
        DQ.push_back(i);
        if (DQ.front()<=i-k) DQ.pop_front();
        if (i>=k && V[DQ.front()]>maxim)
        {
            maxim=V[DQ.front()];
            poz=i;
        }
    }

    printf("%d %d %d",poz-k+1,poz,maxim);

    return 0;
}