using System; using System.Collections.Generic; public class Program { public void Proc() { Reader.IsDebug = false; int cnt = int.Parse(Reader.ReadLine()); int[] inpt = Reader.GetInt(); for(int i=0; i{ return (a.Level < b.Level)?-1:((a.Level > b.Level)?1:0); }); inpt = Reader.GetInt(); List tekiOriginal = new List(); tekiOriginal.AddRange(inpt); int ans = int.MaxValue; for(int i=0; i tmpMikata = new List(); tmpMikata.AddRange(this.MikataList); tekiOriginal.CopyTo(i, tekiArray, 0, tekiOriginal.Count - i); if(i > 0) { tekiOriginal.CopyTo(0, tekiArray, tekiOriginal.Count - i, i); } int maxCount = 0; for(int j=0; j list, Mikata el, int startIdx, int endIdx) { if(Compair(el, list[startIdx]) <= 0) { return startIdx; } if(Compair(el, list[endIdx]) >= 0) { return endIdx + 1; } if(endIdx - startIdx <= 1) { return endIdx; } int mid = (startIdx + endIdx) / 2; int tmp = Compair(el, list[mid]); if(tmp < 0) { return this.FindIndex(list, el, startIdx, mid - 1); } else if(tmp > 0) { return this.FindIndex(list, el, mid, endIdx); } return mid; } private int Compair(Mikata a, Mikata b) { if(a.Level < b.Level) { return -1; } if(a.Level > b.Level) { return 1; } if(a.Count < b.Count) { return -1; } if(a.Count > b.Count) { return 1; } return 0; } private List MikataList = new List(); public struct Mikata { public int Level; public int Count; } public class Reader { private static String InitText = @" "; private static System.IO.StringReader sr = null; public static bool IsDebug = true; public static string ReadLine() { if(IsDebug) { if(sr == null) { sr = new System.IO.StringReader(InitText.Trim()); } return sr.ReadLine(); } else { return Console.ReadLine(); } } public static int[] GetInt(char delimiter = ' ') { string[] inpt = ReadLine().Split(delimiter); int[] ret = new int[inpt.Length]; for(int i=0; i