Pagini recente » Cod sursa (job #2413066) | Cod sursa (job #3281424) | Cod sursa (job #3225337) | Cod sursa (job #1423544) | Cod sursa (job #2090979)
#include <fstream>
#include <deque>
#include <cstdio>
#include <cctype>
using namespace std;
struct Numar
{
int valoare;
int pozitie;
};
char buffer[4096];
char citesteCaracter(int *pozitieCurenta)
{
(*pozitieCurenta)++;
if(*pozitieCurenta == 4096)
{
*pozitieCurenta = 0;
fread(buffer, 1, 4096, stdin);
}
return buffer[*pozitieCurenta];
}
int citesteIntreg(int *pozitieCurenta)
{
int intreg = 0;
char c = citesteCaracter(pozitieCurenta);
while (!isdigit(c) && c != '-')
c = citesteCaracter(pozitieCurenta);
int semn = 1;
if (c == '-')
semn = -1;
else
intreg = c - '0';
c = citesteCaracter(pozitieCurenta);
while (isdigit(c))
{
intreg *= 10;
intreg += c-'0';
c = citesteCaracter(pozitieCurenta);
}
return intreg * semn;
}
int main()
{
int numarNumere, lungimeSecventa;
freopen("secventa.in", "r", stdin);
int pozitieCurenta = 4095;
numarNumere = citesteIntreg(&pozitieCurenta);
lungimeSecventa = citesteIntreg(&pozitieCurenta);
int inceputSecventa=0, sfarsitSecventa=0, bazaMaxima=-30001;
deque<Numar> dequeCrescator;
for(int i=1; i<=numarNumere; ++i)
{
Numar numar;
numar.valoare = citesteIntreg(&pozitieCurenta);
numar.pozitie = i;
while(!dequeCrescator.empty() && numar.valoare <= dequeCrescator.front().valoare)
dequeCrescator.pop_front();
dequeCrescator.push_front(numar);
if(dequeCrescator.back().pozitie == i-lungimeSecventa)
dequeCrescator.pop_back();
if(i>=lungimeSecventa && dequeCrescator.back().valoare>bazaMaxima)
{
bazaMaxima = dequeCrescator.back().valoare;
inceputSecventa = i-lungimeSecventa+1;
sfarsitSecventa = i;
}
}
ofstream fout("secventa.out");
fout << inceputSecventa << ' ' << sfarsitSecventa << ' ' << bazaMaxima;
return 0;
}