using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; class TEST{ static void Main(){ Sol mySol =new Sol(); mySol.Solve(); } } class Sol{ public void Solve(){ var ST = new SegTree(N); //ST.Init(A); for(int i=0;i max){ max = inc; buy = i; } } int sell = 0; if(max != 0){ for(int i=buy;iint.Parse(e));} static long[] rla(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>long.Parse(e));} static double[] rda(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>double.Parse(e));} } class SegTree{ //segment Tree // 0-origin public int[] Data; //実体 public int Inf; //初期化用のlargeNumber public int N; //size public int n; //size (2の冪) //コンストラクタ public SegTree(int n_){ N=n_;Inf=- (int)2e9; n=1; while(n0){ k=(k-1)/2; Data[k]=Math.Max(Data[k*2+1],Data[k*2+2]); } } public int QueryMax (int a, int b){ return Query(a, b, 0, 0, n); } //RMQ; // [a,b) のMinを返す // 後ろ3つの引数は k,l,r:ヒープのk-ノードが範囲 [l,r) に対応していることを示す // 外から呼ぶ時は Query(a,b,0,0,n) の形で呼ぶ public int Query(int a,int b,int k,int l,int r){ // [a,b) ∩ [l,r) =φ ⇒Infを返す if(r<=a || b<=l) return Inf; // [a,b) ⊃ [l,r) ⇒Data[k]を返す if(a<=l && r<=b)return Data[k]; // さもなくば、両手のうち小さい方を返す int vl=Query(a,b,k*2+1,l,(l+r)/2); int vr=Query(a,b,k*2+2,(l+r)/2,r); return Math.Max(vl,vr); } public void Init(int[] A){ for(int i=0;i=0;j--){ Data[j] = Math.Max(Data[2*j+1], Data[2*j+2]); } } public void Dump(){ Console.WriteLine(); int h=0; int cnt=0; for(int i=0;i