Pagini recente » Cod sursa (job #1576683) | Cod sursa (job #83780) | Istoria paginii runda/oni_2009_1_10 | Cod sursa (job #2956384) | Cod sursa (job #972566)
Cod sursa(job #972566)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("secventa.in");
ofstream g("secventa.out");
int Deque[500003],N,K,Arr[500003],Begin,End;
char Number[10];
long long sum;
int power(int x,int y)
{
int i,p=1;
for(i=1;i<=y;i++)
p*=x;
return(p);
}
int AtribValue(int limit)
{
int i,sign=1,start=1;
int result=0;
if(Number[1]=='-')
sign=-1,start=2;
for(i=start;i<=limit;i++)
result+=result*10+(Number[i]-'0');
if(sign==-1)
result*=(-1);
return result;
}
void Read_and_Process()
{
f>>N>>K;
int i,maximum=-32001,end;
Begin=1;
End=0;
for(i=1;i<=N;i++)
{
f>>(Number+1);
Arr[i]=AtribValue(strlen(Number+1));
if(i<K)
{
while(Begin<=End&&Arr[i]<=Arr[Deque[End]])
End--;
Deque[++End]=i;
continue;
}
if(i==K)
{
while(Begin<=End&&Arr[i]<=Arr[Deque[End]])
End--;
Deque[++End]=i;
if(Arr[Deque[Begin]]>maximum)
{
maximum=Arr[Deque[Begin]];
end=K;
}
continue;
}
if(i>K)
{
while(Begin<=End&&Arr[i]<=Arr[Deque[End]])
End--;
Deque[++End]=i;
if(Deque[Begin]==i-K)
Begin++;
if(Arr[Deque[Begin]]>maximum)
{
maximum=Arr[Deque[Begin]];
end=i;
}
}
}
g<<end-K+1<<" "<<end<<" "<<maximum<<"\n";
}
int main()
{
Read_and_Process();
return 0;
}