Pagini recente » Cod sursa (job #2011777) | Cod sursa (job #1949997) | Cod sursa (job #1694946) | Cod sursa (job #162687) | Cod sursa (job #2030818)
#include <fstream>
using namespace std;
int n,i,v[500001],k,p,j,u,maxim,x,p1,p2,k2,el,ok,nr,d[500001];
char c[2000000];
ifstream fin ("secventa.in");
ofstream fout ("secventa.out");
/*class inputReader {
private:
FILE *inputFile;
static const int SIZE = 1 << 12;
char buffer[SIZE]; int cursor;
inline void advance( void ) {
if( ++cursor == SIZE ) {
cursor = 0;
fread( buffer, SIZE, 1, inputFile );
} return;
}
inline char current( void ) {
return buffer[cursor];
}
public:
inputReader( const char *fileName ) {
inputFile = fopen( fileName, "r" ); cursor = 0;
fread( buffer, SIZE, 1, inputFile );
}
inputReader &operator >>( int &value ) {
value = 0;
while( current() < '0' || current() > '9' )
advance();
while( current() >= '0' && current() <= '9' ) {
value = value * 10 + ( current() - '0' );
advance();
}
return *this;
}
} fin( "secventa.in" );
ofstream fout( "secventa.out" );*/
int main (){
fin>>n>>k;
//for (i=1;i<=n;i++)
// fin>>v[i];
fin.get();
fin.getline (c,2000000);
for (i=0;c[i]!=0;i++){
if (c[i] == '-'){
ok = 1;
continue;
}
if (c[i] == ' '){
// s a terminat un numar
if (ok == 1)
nr = -nr;
v[++el] = nr;
nr = 0;
ok = 0;
}
else{
nr = nr*10 + c[i]-'0';
}
}
v[++el] = nr;
p = 1;
u = 1;
d[1] = 1;
maxim = -2000000000;
for (i=2;i<=n;i++){
while (p<=u && v[i] <= v[d[u]])
u--;
d[++u] = i;
if (i-d[p] == k)
p++;
if (i>=k && v[d[p]] > maxim){
maxim = v[d[p]];
p1 = i-k+1;
p2 = i;
}
}
fout<<p1<<" "<<p2<<" "<<maxim;
return 0;
}