Cod sursa(job #582450)

Utilizator BitOneSAlexandru BitOne Data 15 aprilie 2011 13:13:57
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <queue>
#include <fstream>
#include <cstdlib>
#define N_MAX 5000011
#define MaxBuffer 8192

using namespace std;
int v[N_MAX];
deque< int > dQ;
char buffer[MaxBuffer];
int bufferIndex=-1;
inline void Read( istream& in, int& x )
{
    int sgn=1;
    if( -1 == bufferIndex )
    {
        bufferIndex=0;
        in.read( buffer, MaxBuffer );
    }
    while( buffer[bufferIndex] < '0' || buffer[bufferIndex] > '9' )
    {
        if( '-' == buffer[bufferIndex] )
            sgn*=-1;
        if( ++bufferIndex == MaxBuffer )
        {
            bufferIndex=0;
            in.read( buffer, MaxBuffer );
        }
    }
    for( x=0; buffer[bufferIndex] >= '0' && buffer[bufferIndex] <= '9'; )
    {
        x=x*10+buffer[bufferIndex]-'0';
        if( ++bufferIndex == MaxBuffer )
        {
            bufferIndex=0;
            in.read( buffer, MaxBuffer );
        }
    }
    x*=sgn;
}
int main( void )
{
    int N, K, i;
    long long s=0;
    ifstream in( "deque.in" );
    Read( in, N); Read( in, K);
    for( i=1; i <= N; ++i )
    {
       Read( in, v[i]);
       for( ; !dQ.empty() && v[i] <= v[dQ.back()]; dQ.pop_back() );
       dQ.push_back(i);
       if( i >= K )
            s+=v[dQ.front()];
        if( i-K+1 == dQ.front() )
            dQ.pop_front();
    }
    ofstream out( "deque.out" );
    out<<s<<'\n';
}