Pagini recente » Cod sursa (job #11403) | Cod sursa (job #2665294) | Cod sursa (job #2487412) | Cod sursa (job #660444) | Cod sursa (job #547476)
Cod sursa(job #547476)
#include<fstream>
#include<deque>
#include<algorithm>
using namespace std;
void read();
void solve();
deque<int > minQ, maxQ;
long long a[50005];
int n, k;
long long maxim = -1000000000000000000LL;
int inc, sf;
int main()
{
read();
solve();
return 0;
}
void read()
{
ifstream fin("secv2.in");
fin >> n >> k;
int nr;
for(int i = 1; i <= n; ++i)
{
fin >> nr;
a[i] = a[i-1] + nr;
}
fin.close();
}
void solve()
{
ofstream fout("secv2.out");
for(int i = 1; i <= n; ++i)
{
while( !minQ.empty() && a[i] <= a[ minQ.back() ] )
minQ.pop_back();
minQ.push_back(i);
while( !maxQ.empty() && a[i] >= a[ maxQ.back() ] )
maxQ.pop_back();
maxQ.push_back(i);
while( !maxQ.empty() && maxQ.front() <= minQ.front() )
if( maxQ.size() == 1)
maxQ.clear();
else
maxQ.pop_front();
if( i >= k && !maxQ.empty() && a[ maxQ.front() ] - a[minQ.front() ] > maxim )
{
inc = min( maxQ.front(), minQ.front() );
sf = max( maxQ.front(), minQ.front() );
maxim = a[ maxQ.front() ] - a[minQ.front() ];
}
}
if( maxim == -1000000000000000000LL )
{
fout << 1 << " " << n << " ";
fout << a[n] - a[0];
}
else
fout << inc+1 <<" "<<sf <<" "<< maxim;
fout.close();
}