using System.Collections.Generic;
public static void PrintAll<T>(this T[] array)
foreach(T element in array)
Console.Write(element + " ");
public static void PrintSubArrayMin<T>(this T[] array, int subLength)
throw new ArgumentException("subLength > array length");
for(int i = 0; i + subLength <= n; i++)
T[] subArray = new ArraySegment<T>(array, i, subLength).ToArray();
Console.WriteLine("base subarray:");
Console.WriteLine("min element:");
Console.WriteLine(subArray.Min());
public static T[] MaxUp<T>(this T[] array) where T : IComparable<T>
if(array == null || array.Length == 0)
throw new ArgumentNullException();
List<T> maxUp = new List<T>();
List<T> curMaxUp = new List<T>(){array[0]};
for(int i = 1; i < array.Length; i++)
if(array[i].CompareTo(array[i-1])>0)
else if(curMaxUp.Count > maxUp.Count)
curMaxUp = new List<T>(){array[i]};
if(curMaxUp.Count > maxUp.Count)
private static void task2()
Console.WriteLine("task2");
int[] array2 = new int[]{1,23,6,2,534,56,2,546,123,7,97,2,654,9877,23};
Console.WriteLine("base array:");
Console.WriteLine("max up:");
array2.MaxUp().PrintAll();
private static void task1()
Console.WriteLine("task1");
Stack<int> st = new Stack<int>();
Console.WriteLine("stack min:{0}", st.Min());
Queue<int> q = new Queue<int>();
Console.WriteLine("queue min:{0}", q.Min());
int[] array = new int[]{1,2,3,4,5,6,7,8,9,10,11,12,7,14,1};
Console.WriteLine("base array:");
array.PrintSubArrayMin(5);
public static void Main()