Быстро набросал решение, оно не оптимальное, но должно быть правильным
Для массива в формате double:
double max = (from d in array select d).Max(); // ищем максимальный элемент массива
if (max != null) // если нашли, то
{
int maxIndex = array.ToList().IndexOf(max); // ищем индекс максимального элемента
double firstNegative = (from d in array where d < 0 select d).FirstOrDefault(); //ищем первый отрицательный
if (firstNegative != null) //проверяем, нашли ли мы отрицательный элемент
{
int negativeIndex = array.ToList().IndexOf(firstNegative); // ищем индекс отрицательного элемента
array[negativeIndex] = 0; // обнуляем отрицательный элемент
for (int i = maxIndex; i < array.Length; i++)
{
array[negativeIndex] += array; //суммируем нужные нам элементы
}
}
}