Pagini recente » Cod sursa (job #1938373) | Cod sursa (job #1343908) | Cod sursa (job #1168408) | Cod sursa (job #1577398) | Cod sursa (job #2375705)
#include <iostream>
#include <fstream>
#include <deque>
#include <vector>
#include <cstring>
using namespace std;
ifstream f1("secventa.in");
ofstream f2("secventa.out");
int n,k,indique,maximoIndico;
deque<int> indicusMaximus;
int numere[500005];
char sir[3500005];
int main() {
f1>>n>>k;
f1.get();
f1.getline(sir, 3500005);
int p = strlen(sir);
int count = 0;
int nr;
int semn = 1;
for(int i=0;i<strlen(sir);i++){
if(sir[i]=='-'){
semn = -1;
i++;
}
if(sir[i]<'0' || sir[i]>'9') continue;
nr = 0;
while(!(sir[i]<'0' || sir[i]>'9')){
nr = nr*10 + (sir[i]-'0');
i++;
}
nr = nr*semn;
semn = 1;
numere[count] = nr;
count++;
}
indicusMaximus.push_back(0);
for(int i=1;i<k;i++){
while(!indicusMaximus.empty() && numere[indicusMaximus.back()]>numere[i])
indicusMaximus.pop_back();
indicusMaximus.push_back(i);
}
indique = k;
maximoIndico = indicusMaximus.front();
for(int i=k;i<n;i++){
if(i-k==indicusMaximus.front())
indicusMaximus.pop_front();
while(!indicusMaximus.empty() && numere[indicusMaximus.back()]>numere[i])
indicusMaximus.pop_back();
indicusMaximus.push_back(i);
if(numere[indicusMaximus.front()]> numere[maximoIndico]){
indique = i+1;
maximoIndico = indicusMaximus.front();
}
}
f2<<indique-k+1<<" "<<indique<<" "<<numere[maximoIndico];
return 0;
}