<?php
function
maxIndexDiff(&
$arr
,
$n
)
{
$LMin
[
$n
] =
array
();
$RMax
[
$n
] =
array
();
$LMin
[0] =
$arr
[0];
for
(
$i
= 1;
$i
<
$n
; ++
$i
)
$LMin
[
$i
] = min(
$arr
[
$i
],
$LMin
[
$i
- 1]);
$RMax
[
$n
- 1] =
$arr
[
$n
- 1];
for
(
$j
=
$n
- 2;
$j
>= 0; --
$j
)
$RMax
[
$j
] = max(
$arr
[
$j
],
$RMax
[
$j
+ 1]);
$i
= 0;
$j
= 0;
$maxDiff
= -1;
while
(
$j
<
$n
&&
$i
<
$n
)
{
if
(
$LMin
[
$i
] <
$RMax
[
$j
])
{
$maxDiff
= max(
$maxDiff
,
$j
-
$i
);
$j
=
$j
+ 1;
}
else
$i
=
$i
+ 1;
}
return
$maxDiff
+ 1;
}
function
modifyarr(
$arr
,
$n
,
$x
)
{
for
(
$i
= 0;
$i
<
$n
;
$i
++)
$arr
[
$i
] =
$arr
[
$i
] -
$x
;
return
calcprefix(
$arr
,
$n
);
}
function
calcprefix(&
$arr
,
$n
)
{
$s
= 0;
for
(
$i
= 0;
$i
<
$n
;
$i
++)
{
$s
+=
$arr
[
$i
];
$arr
[
$i
] =
$s
;
}
return
maxIndexDiff(
$arr
,
$n
);
}
function
longestsubarray(&
$arr
,
$n
,
$x
)
{
return
modifyarr(
$arr
,
$n
,
$x
);
}
$arr
=
array
( 1, 1, 2, -1, -1, 1 );
$x
= 1;
$n
= sizeof(
$arr
);
echo
longestsubarray(
$arr
,
$n
,
$x
) ;
?>