Pagini recente » Cod sursa (job #2052078) | Cod sursa (job #2134713) | Cod sursa (job #1191340) | Cod sursa (job #1172821) | Cod sursa (job #140331)
Cod sursa(job #140331)
#include<fstream.h>
//#include<conio.h>
struct nr
{
int num;
long poz;
};
void recons(int n,int i,nr v[500005])
{
int max,st,dr;
st=2*i;
dr=2*i+1;
max=i;
if (v[st].num>v[i].num&&st<=n) max=st;
if (v[dr].num>v[max].num&&dr<=n) max=dr;
if (max!=i)
{
nr aux;
aux=v[i];
v[i]=v[max];
v[max]=aux;
recons(n,max,v);
}
}
int main()
{
int i;
long m,n,k;
nr v[500005];
int a[500005];
ifstream f("secventa.in");
ofstream g("secventa.out");
f>>n>>k;
m=n;
for (i=1;i<=n;i++) {f>>v[i].num;a[i]=v[i].num;v[i].poz=i;}
for (i=n/2;i>=1;i--) recons (n,i,v);
for (i=m;i>=2;i--)
{
nr aux;
aux=v[i];
v[i]=v[1];
v[1]=aux;
n--;
recons(n,1,v);
}
//for (i=1;i<=m;i++) g<<v[i].num<<' ';
//g<<endl;
//for (i=1;i<=m;i++) g<<v[i].poz<<' ';
n=m;
a[n+1]=a[n];
a[0]=a[1];
long z;
long scos=k-1;
for (z=n-1;z>=1;z--)
{
if (v[z].num!=v[z+1].num) scos--;
if (scos==0) break;
}
long x,in=500002,sf=500002,b,po,dr,st;
for (x=z;x>=1;x--)
{
po=v[x].poz;
dr=v[x].poz;
st=v[x].poz;
while (st>=2&&a[st-1]>=a[po]) st--;
if (st==2&&a[po]<=a[1]) st--;
while (dr<=n-1&&dr-st<k-1&&a[po]<=a[dr+1]) dr++;
if (dr==n-1&&a[po]<=a[dr+1]) dr++;
if (dr-st>=k-1)
{
in=st;
sf=dr;
b=po;
break;
}
}
x--;
while (v[x].num==a[b])
{
po=v[x].poz;
dr=v[x].poz;
st=v[x].poz;
while (st>=2&&a[st-1]>=a[po]) st--;
if (st==2&&a[po]<=a[1]) st--;
while (dr<=n-1&&dr-st<k-1&&a[po]<=a[dr+1]) dr++;
if (dr==n-1&&a[po]<=a[dr+1]) dr++;
if (dr-st>=k-1)
if ((st<in)||(st==in&&dr<sf))
{
in=st;
sf=dr;
b=po;
}
x--;
}
g<<in<<' '<<sf<<' '<<a[b];
f.close();
g.close();
return 0;
}