Submission #19925793
Source Code Expand
using AtCoder;
using AtCoder.Internal;
using Kzrnm.Competitive.IO;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.Intrinsics.X86;
using System.Text;
using static System.Math;
partial class Program
{
partial void WriteBool(bool b) => cw.WriteLine(b ? "Yes" : "No");
bool __ManyTestCases() => false;
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
private object Calc()
{
int N = cr;
var cnts = new (int r, int g, int b)[N];
{
var (sizes, colors) = cr.Repeat(N).SelectArray(cr => (cr.Int, cr.Char));
Array.Sort(sizes, colors);
int R = 0;
int G = 0;
int B = 0;
int r = 0;
for (int l = 0; l < sizes.Length; l++)
{
while (r < sizes.Length && sizes[r] < 2 * sizes[l])
{
switch (colors[r++])
{
case 'R': ++R; break;
case 'G': ++G; break;
case 'B': ++B; break;
}
}
cnts[l] = (R, G + 1, B + 1);
switch (colors[l])
{
case 'R': --R; break;
case 'G': --G; break;
case 'B': --B; break;
}
}
cnts.Sort();
}
GC.Collect();
int ci = cnts.Length - 1;
var set = new SetDictionary<int, int> { { 0, N + 10 }, { N + 10, 0 } };
long area = 0;
long res = -1;
for (int rc = N + 1; rc >= 0; rc--)
{
while (ci >= 0 && cnts[ci].r == rc)
{
var (_, g, b) = cnts[ci--];
bool fl = false;
var items = set.EnumerateNode(set.FindNodeUpperBound(g), true)
.TakeWhile(n =>
{
if (fl) return false;
fl = b < n.Value;
return true;
}).ToArray();
if (b <= items[0].Value) continue;
area += (long)(g - items[1].Key) * (b - items[0].Value);
for (int i = 1; i + 2 < items.Length; i++)
{
area += (long)(items[i].Key - items[i + 1].Key) * (b - items[i].Value);
set.Remove(items[i].Key);
}
if (items.Length == 2)
{
set.Add(g, b);
continue;
}
area += (long)(items[^2].Key - items[^1].Key) * (b - items[^2].Value);
if (items[^2].Value == 0)
set.Add(g, b);
else
{
items[^2].Key = g;
items[^2].Value = b;
}
}
if (rc % 100000 == 0) GC.Collect();
res += area;
}
return res;
}
}
struct Op : ILazySegtreeOperator<(int max, int cnt, long sum), int>
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public (int max, int cnt, long sum) Operate((int max, int cnt, long sum) x, (int max, int cnt, long sum) y) => (Max(x.max, y.max), x.cnt + y.cnt, x.sum + y.sum);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public (int max, int cnt, long sum) Mapping(int f, (int max, int cnt, long sum) x) => (f, x.cnt, (long)x.cnt * f);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public int Composition(int nf, int cf) => Max(nf, cf);
public (int max, int cnt, long sum) Identity => (0, 0, 0);
public int FIdentity => 0;
}
#region Expanded by https://github.com/naminodarie/SourceExpander
//LICENSE: https://github.com/naminodarie/AtCoderProject/blob/master/LICENSE
namespace AtCoder{public interface ILazySegtreeOperator<T,F>{T Identity{get;}F FIdentity{get;}T Operate(T x,T y);T Mapping(F f,T x);F Composition(F nf,F cf);}public class LazySegtree<TValue,F,TOp>where TOp:struct,ILazySegtreeOperator<TValue,F>{private static readonly TOp op=default;public int Length{get;}internal readonly int log;internal readonly int size;public readonly TValue[]d;public readonly F[]lz;public LazySegtree(int n){Length=n;log=InternalBit.CeilPow2(n);size=1<<log;d=new TValue[2*size];lz=new F[size];Array.Fill(d,op.Identity);Array.Fill(lz,op.FIdentity);}public LazySegtree(TValue[]v):this(v.Length){for(int i=0;i<v.Length;i++)d[size+i]=v[i];for(int i=size-1;i>=1;i--){Update(i);}}[MethodImpl(MethodImplOptions.AggressiveInlining)]public void Update(int k)=>d[k]=op.Operate(d[2*k],d[2*k+1]);[MethodImpl(MethodImplOptions.AggressiveInlining)]public void AllApply(int k,F f){d[k]=op.Mapping(f,d[k]);if(k<size)lz[k]=op.Composition(f,lz[k]);}[MethodImpl(MethodImplOptions.AggressiveInlining)]public void Push(int k){AllApply(2*k,lz[k]);AllApply(2*k+1,lz[k]);lz[k]=op.FIdentity;}public TValue this[int p]{[MethodImpl(MethodImplOptions.AggressiveInlining)]set{p+=size;for(int i=log;i>=1;i--)Push(p>>i);d[p]=value;for(int i=1;i<=log;i++)Update(p>>i);}[MethodImpl(MethodImplOptions.AggressiveInlining)]get{p+=size;for(int i=log;i>=1;i--)Push(p>>i);return d[p];}}[MethodImpl(MethodImplOptions.AggressiveInlining)]public TValue Slice(int l,int len)=>Prod(l,l+len);[MethodImpl(MethodImplOptions.AggressiveInlining)]public TValue Prod(int l,int r){if(l==r)return op.Identity;l+=size;r+=size;for(int i=log;i>=1;i--){if(((l>>i)<<i)!=l)Push(l>>i);if(((r>>i)<<i)!=r)Push(r>>i);}TValue sml=op.Identity,smr=op.Identity;while(l<r){if((l&1)!=0)sml=op.Operate(sml,d[l++]);if((r&1)!=0)smr=op.Operate(d[ --r],smr);l>>=1;r>>=1;}return op.Operate(sml,smr);}public TValue AllProd=>d[1];public void Apply(int p,F f){p+=size;for(int i=log;i>=1;i--)Push(p>>i);d[p]=op.Mapping(f,d[p]);for(int i=1;i<=log;i++)Update(p>>i);}public void Apply(int l,int r,F f){if(l==r)return;l+=size;r+=size;for(int i=log;i>=1;i--){if(((l>>i)<<i)!=l)Push(l>>i);if(((r>>i)<<i)!=r)Push((r-1)>>i);}{int l2=l,r2=r;while(l<r){if((l&1)!=0)AllApply(l++,f);if((r&1)!=0)AllApply( --r,f);l>>=1;r>>=1;}l=l2;r=r2;}for(int i=1;i<=log;i++){if(((l>>i)<<i)!=l)Update(l>>i);if(((r>>i)<<i)!=r)Update((r-1)>>i);}}public int MaxRight(int l,Predicate<TValue>g){if(l==Length)return Length;l+=size;for(int i=log;i>=1;i--)Push(l>>i);TValue sm=op.Identity;do{while(l%2==0)l>>=1;if(!g(op.Operate(sm,d[l]))){while(l<size){Push(l);l=(2*l);if(g(op.Operate(sm,d[l]))){sm=op.Operate(sm,d[l]);l++;}}return l-size;}sm=op.Operate(sm,d[l]);l++;}while((l&-l)!=l);return Length;}public int MinLeft(int r,Predicate<TValue>g){if(r==0)return 0;r+=size;for(int i=log;i>=1;i--)Push((r-1)>>i);TValue sm=op.Identity;do{r--;while(r>1&&(r%2)!=0)r>>=1;if(!g(op.Operate(d[r],sm))){while(r<size){Push(r);r=(2*r+1);if(g(op.Operate(d[r],sm))){sm=op.Operate(d[r],sm);r--;}}return r+1-size;}sm=op.Operate(d[r],sm);}while((r&-r)!=r);return 0;}private struct DebugItem{public DebugItem(int l,int r,TValue value,F lazy){if(r-l==1)key=$"[{l}]";else key=$"[{l}-{r})";this.value=value;this.lazy=lazy;}private readonly string key;private readonly TValue value;private readonly F lazy;}private class DebugView{private readonly LazySegtree<TValue,F,TOp>segtree;public DebugView(LazySegtree<TValue,F,TOp>segtree){this.segtree=segtree;}public DebugItem[]Items{get{var items=new List<DebugItem>(segtree.Length);for(int len=segtree.size;len>0;len>>=1){int unit=segtree.size/len;for(int i=0;i<len;i++){int l=i*unit;int r=Math.Min(l+unit,segtree.Length);if(l<segtree.Length){int dataIndex=i+len;if((uint)dataIndex<segtree.lz.Length)items.Add(new DebugItem(l,r,segtree.d[dataIndex],segtree.lz[dataIndex]));else items.Add(new DebugItem(l,r,segtree.d[dataIndex],op.FIdentity));}}}return items.ToArray();}}}}}
namespace AtCoder{public class SetDictionary<TKey,TValue>:SetDictionary<TKey,TValue,DefaultComparerStruct<TKey>>where TKey:IComparable<TKey>{public SetDictionary(bool isMulti=false):base(new DefaultComparerStruct<TKey>(),isMulti){}public SetDictionary(IDictionary<TKey,TValue>dict,bool isMulti=false):base(dict,new DefaultComparerStruct<TKey>(),isMulti){}}public class SetDictionary<TKey,TValue,TOp>:IDictionary<TKey,TValue>,IReadOnlyDictionary<TKey,TValue>where TOp:struct,IComparer<TKey>{internal const string LISENCE=@"
Original is SortedSet<T>
Copyright (c) .NET Foundation and Contributors
Released under the MIT license
https://github.com/dotnet/runtime/blob/master/LICENSE.TXT
";public SetDictionary(bool isMulti=false):this(default(TOp),isMulti){}public SetDictionary(IDictionary<TKey,TValue>dict,bool isMulti=false):this(dict,default(TOp),isMulti){}public SetDictionary(TOp comparer,bool isMulti=false){this.comparer=comparer;IsMulti=isMulti;}public SetDictionary(IDictionary<TKey,TValue>dict,TOp comparer,bool isMulti=false){this.comparer=comparer;var arr=InitArray(dict);root=ConstructRootFromSortedArray(arr,0,arr.Length-1,null);IsMulti=isMulti;}public bool IsMulti{get;}public KeyValuePair<TKey,TValue>Min{get{if(root==null)return default;var cur=root;while(cur.Left!=null){cur=cur.Left;}return cur.Pair;}}public KeyValuePair<TKey,TValue>Max{get{if(root==null)return default;var cur=root;while(cur.Right!=null){cur=cur.Right;}return cur.Pair;}}public Node FindNode(TKey key){Node current=root;while(current!=null){int order=comparer.Compare(key,current.Key);if(order==0)return current;current=order<0?current.Left:current.Right;}return null;}public int Index(Node node){var ret=NodeSize(node.Left);Node prev=node;node=node.Parent;while(prev!=root){if(node.Left!=prev){ret+=NodeSize(node.Left)+1;}prev=node;node=node.Parent;}return ret;}public Node FindByIndex(int index){var current=root;var currentIndex=current.Size-NodeSize(current.Right)-1;while(currentIndex!=index){if(currentIndex>index){current=current.Left;if(current==null)break;currentIndex-=NodeSize(current.Right)+1;}else{current=current.Right;if(current==null)break;currentIndex+=NodeSize(current.Left)+1;}}return current;}public(Node node,int index)BinarySearch(TKey key,bool isLowerBound){Node right=null;Node current=root;if(current==null)return(null,-1);int ri=Count;int ci=NodeSize(current.Left);while(true){var order=comparer.Compare(key,current.Key);if(order<0||(isLowerBound&&order==0)){right=current;ri=ci;current=current.Left;if(current!=null)ci-=NodeSize(current.Right)+1;else break;}else{current=current.Right;if(current!=null)ci+=NodeSize(current.Left)+1;else break;}}return(right,ri);}public Node FindNodeLowerBound(TKey key)=>BinarySearch(key,true).node;public Node FindNodeUpperBound(TKey key)=>BinarySearch(key,false).node;public KeyValuePair<TKey,TValue>LowerBoundItem(TKey key)=>BinarySearch(key,true).node.Pair;public KeyValuePair<TKey,TValue>UpperBoundItem(TKey key)=>BinarySearch(key,false).node.Pair;public int LowerBoundIndex(TKey key)=>BinarySearch(key,true).index;public int UpperBoundIndex(TKey key)=>BinarySearch(key,false).index;public IEnumerable<KeyValuePair<TKey,TValue>>Reversed(){var e=new ValueEnumerator(this,true,null);while(e.MoveNext())yield return e.Current;}public IEnumerable<KeyValuePair<TKey,TValue>>EnumerateItem(Node from,bool reverse=false){if(from==null)yield break;var e=new ValueEnumerator(this,reverse,from);while(e.MoveNext())yield return e.Current;}public IEnumerable<Node>EnumerateNode(Node from,bool reverse=false){if(from==null)yield break;var e=new Enumerator(this,reverse,from);while(e.MoveNext())yield return e.Current;}protected KeyValuePair<TKey,TValue>[]InitArray(IEnumerable<KeyValuePair<TKey,TValue>>collection){var comparer=Comparer<KeyValuePair<TKey,TValue>>.Create((a,b)=>this.comparer.Compare(a.Key,b.Key));KeyValuePair<TKey,TValue>[]arr;if(IsMulti){arr=collection.ToArray();Array.Sort(arr,comparer);}else{var list=new List<KeyValuePair<TKey,TValue>>(collection);list.Sort(comparer);for(int i=list.Count-1;i>0;i--)if(this.comparer.Compare(list[i-1].Key,list[i].Key)==0)list.RemoveAt(i);arr=list.ToArray();}return arr;}public int Count=>NodeSize(root);protected static int NodeSize(Node node)=>node==null?0:node.Size;protected readonly TOp comparer;bool ICollection<KeyValuePair<TKey,TValue>>.IsReadOnly=>false;ICollection<TKey>IDictionary<TKey,TValue>.Keys=>throw new NotSupportedException();ICollection<TValue>IDictionary<TKey,TValue>.Values=>throw new NotSupportedException();IEnumerable<TKey>IReadOnlyDictionary<TKey,TValue>.Keys=>throw new NotSupportedException();IEnumerable<TValue>IReadOnlyDictionary<TKey,TValue>.Values=>throw new NotSupportedException();public TValue this[TKey key]{get=>throw new NotSupportedException();set=>throw new NotSupportedException();}Node root;static Node ConstructRootFromSortedArray(KeyValuePair<TKey,TValue>[]arr,int startIndex,int endIndex,Node redNode){int size=endIndex-startIndex+1;Node root;switch(size){case 0:return null;case 1:root=new Node(arr[startIndex],false);if(redNode!=null){root.Left=redNode;}break;case 2:root=new Node(arr[startIndex],false){Right=new Node(arr[endIndex],true)};if(redNode!=null){root.Left=redNode;}break;case 3:root=new Node(arr[startIndex+1],false){Left=new Node(arr[startIndex],false),Right=new Node(arr[endIndex],false)};if(redNode!=null){root.Left.Left=redNode;}break;default:int midpt=((startIndex+endIndex)/2);root=new Node(arr[midpt],false){Left=ConstructRootFromSortedArray(arr,startIndex,midpt-1,redNode),Right=size%2==0?ConstructRootFromSortedArray(arr,midpt+2,endIndex,new Node(arr[midpt+1],true)):ConstructRootFromSortedArray(arr,midpt+1,endIndex,null)};break;}return root;}void IDictionary<TKey,TValue>.Add(TKey key,TValue value)=>Add(key,value);void ICollection<KeyValuePair<TKey,TValue>>.Add(KeyValuePair<TKey,TValue>pair)=>Add(pair.Key,pair.Value);public bool Add(TKey key,TValue value){if(root==null){root=new Node(key,value,false);return true;}Node current=root;Node parent=null;Node grandParent=null;Node greatGrandParent=null;int order=0;while(current!=null){order=comparer.Compare(key,current.Key);if(order==0&&!IsMulti){current.Key=key;root.IsRed=false;return false;}if(Is4Node(current)){Split4Node(current);if(IsNonNullRed(parent)==true){InsertionBalance(current,ref parent,grandParent,greatGrandParent);}}greatGrandParent=grandParent;grandParent=parent;parent=current;current=(order<0)?current.Left:current.Right;}Node node=new Node(key,value,true);if(order>=0)parent.Right=node;else parent.Left=node;if(parent.IsRed)InsertionBalance(node,ref parent,grandParent,greatGrandParent);root.IsRed=false;return true;}public void Remove(Node node){Node match=node;Node parentOfMatch=node.Parent;Node current=node;Node parent=parentOfMatch;Node grandParent=parentOfMatch?.Parent;while(current!=null){if(Is2Node(current)){if(parent==null){current.IsRed=true;}else{Node sibling=GetSibling(current,parent);if(sibling.IsRed){if(parent.Right==sibling)RotateLeft(parent);else RotateRight(parent);parent.IsRed=true;sibling.IsRed=false;ReplaceChildOrRoot(grandParent,parent,sibling);grandParent=sibling;if(parent==match)parentOfMatch=sibling;sibling=(parent.Left==current)?parent.Right:parent.Left;}if(Is2Node(sibling)){Merge2Nodes(parent);}else{TreeRotation rotation=GetRotation(parent,current,sibling);Node newGrandParent=Rotate(parent,rotation);newGrandParent.IsRed=parent.IsRed;parent.IsRed=false;current.IsRed=true;ReplaceChildOrRoot(grandParent,parent,newGrandParent);if(parent==match){parentOfMatch=newGrandParent;}}}}grandParent=parent;parent=current;current=current==match?current.Right:current.Left;}if(match!=null){ReplaceNode(match,parentOfMatch,parent,grandParent);}if(root!=null){root.IsRed=false;}}public bool Remove(TKey key){if(root==null)return false;Node current=root;Node parent=null;Node grandParent=null;Node match=null;Node parentOfMatch=null;bool foundMatch=false;while(current!=null){if(Is2Node(current)){if(parent==null){current.IsRed=true;}else{Node sibling=GetSibling(current,parent);if(sibling.IsRed){if(parent.Right==sibling)RotateLeft(parent);else RotateRight(parent);parent.IsRed=true;sibling.IsRed=false;ReplaceChildOrRoot(grandParent,parent,sibling);grandParent=sibling;if(parent==match)parentOfMatch=sibling;sibling=(parent.Left==current)?parent.Right:parent.Left;}if(Is2Node(sibling)){Merge2Nodes(parent);}else{TreeRotation rotation=GetRotation(parent,current,sibling);Node newGrandParent=Rotate(parent,rotation);newGrandParent.IsRed=parent.IsRed;parent.IsRed=false;current.IsRed=true;ReplaceChildOrRoot(grandParent,parent,newGrandParent);if(parent==match){parentOfMatch=newGrandParent;}}}}int order=foundMatch?-1:comparer.Compare(key,current.Key);if(order==0){foundMatch=true;match=current;parentOfMatch=parent;}grandParent=parent;parent=current;current=order<0?current.Left:current.Right;}if(match!=null){ReplaceNode(match,parentOfMatch,parent,grandParent);}if(root!=null){root.IsRed=false;}return foundMatch;}bool ICollection<KeyValuePair<TKey,TValue>>.Remove(KeyValuePair<TKey,TValue>pair){if(root==null)return false;Node current=root;Node parent=null;Node grandParent=null;Node match=null;Node parentOfMatch=null;bool foundMatch=false;while(current!=null){if(Is2Node(current)){if(parent==null){current.IsRed=true;}else{Node sibling=GetSibling(current,parent);if(sibling.IsRed){if(parent.Right==sibling)RotateLeft(parent);else RotateRight(parent);parent.IsRed=true;sibling.IsRed=false;ReplaceChildOrRoot(grandParent,parent,sibling);grandParent=sibling;if(parent==match)parentOfMatch=sibling;sibling=(parent.Left==current)?parent.Right:parent.Left;}if(Is2Node(sibling)){Merge2Nodes(parent);}else{TreeRotation rotation=GetRotation(parent,current,sibling);Node newGrandParent=Rotate(parent,rotation);newGrandParent.IsRed=parent.IsRed;parent.IsRed=false;current.IsRed=true;ReplaceChildOrRoot(grandParent,parent,newGrandParent);if(parent==match){parentOfMatch=newGrandParent;}}}}int order=foundMatch?-1:comparer.Compare(pair.Key,current.Key);if(order==0&&EqualityComparer<TValue>.Default.Equals(pair.Value,current.Value)){foundMatch=true;match=current;parentOfMatch=parent;}grandParent=parent;parent=current;current=order<0?current.Left:current.Right;}if(match!=null){ReplaceNode(match,parentOfMatch,parent,grandParent);}if(root!=null){root.IsRed=false;}return foundMatch;}public void Clear(){root=null;}public bool ContainsKey(TKey key)=>FindNode(key)!=null;bool ICollection<KeyValuePair<TKey,TValue>>.Contains(KeyValuePair<TKey,TValue>pair){var node=FindNodeLowerBound(pair.Key);if(node==null)return false;var e=new Enumerator(this,false,node);while(e.MoveNext()){if(comparer.Compare(pair.Key,e.Current.Key)!=0)break;if(EqualityComparer<TValue>.Default.Equals(pair.Value,e.Current.Value))return true;}return false;}public void CopyTo(KeyValuePair<TKey,TValue>[]array,int arrayIndex){foreach(var item in this)array[arrayIndex++]=item;}public bool TryGetValue(TKey key,out TValue value){var node=FindNode(key);if(node==null){value=default;return false;}value=node.Value;return true;}public ValueEnumerator GetEnumerator()=>new ValueEnumerator(this);IEnumerator<KeyValuePair<TKey,TValue>>IEnumerable<KeyValuePair<TKey,TValue>>.GetEnumerator()=>new ValueEnumerator(this);IEnumerator IEnumerable.GetEnumerator()=>new ValueEnumerator(this);static bool Is2Node(Node node)=>IsNonNullBlack(node)&&IsNullOrBlack(node.Left)&&IsNullOrBlack(node.Right);static bool Is4Node(Node node)=>IsNonNullRed(node.Left)&&IsNonNullRed(node.Right);static bool IsNonNullRed(Node node)=>node!=null&&node.IsRed;static bool IsNonNullBlack(Node node)=>node!=null&&!node.IsRed;static bool IsNullOrBlack(Node node)=>node==null||!node.IsRed;void ReplaceNode(Node match,Node parentOfMatch,Node succesor,Node parentOfSuccesor){if(succesor==match){succesor=match.Left;}else{if(succesor.Right!=null){succesor.Right.IsRed=false;}if(parentOfSuccesor!=match){parentOfSuccesor.Left=succesor.Right;succesor.Right=match.Right;}succesor.Left=match.Left;}if(succesor!=null){succesor.IsRed=match.IsRed;}ReplaceChildOrRoot(parentOfMatch,match,succesor);}static void Merge2Nodes(Node parent){parent.IsRed=false;parent.Left.IsRed=true;parent.Right.IsRed=true;}static void Split4Node(Node node){node.IsRed=true;node.Left.IsRed=false;node.Right.IsRed=false;}static Node GetSibling(Node node,Node parent){return parent.Left==node?parent.Right:parent.Left;}void InsertionBalance(Node current,ref Node parent,Node grandParent,Node greatGrandParent){bool parentIsOnRight=grandParent.Right==parent;bool currentIsOnRight=parent.Right==current;Node newChildOfGreatGrandParent;if(parentIsOnRight==currentIsOnRight){newChildOfGreatGrandParent=currentIsOnRight?RotateLeft(grandParent):RotateRight(grandParent);}else{newChildOfGreatGrandParent=currentIsOnRight?RotateLeftRight(grandParent):RotateRightLeft(grandParent);parent=greatGrandParent;}grandParent.IsRed=true;newChildOfGreatGrandParent.IsRed=false;ReplaceChildOrRoot(greatGrandParent,grandParent,newChildOfGreatGrandParent);}static Node Rotate(Node node,TreeRotation rotation){switch(rotation){case TreeRotation.Right:node.Left.Left.IsRed=false;return RotateRight(node);case TreeRotation.Left:node.Right.Right.IsRed=false;return RotateLeft(node);case TreeRotation.RightLeft:return RotateRightLeft(node);case TreeRotation.LeftRight:return RotateLeftRight(node);default:throw new InvalidOperationException();}}static Node RotateLeft(Node node){Node child=node.Right;node.Right=child.Left;child.Left=node;return child;}static Node RotateLeftRight(Node node){Node child=node.Left;Node grandChild=child.Right;node.Left=grandChild.Right;grandChild.Right=node;child.Right=grandChild.Left;grandChild.Left=child;return grandChild;}static Node RotateRight(Node node){Node child=node.Left;node.Left=child.Right;child.Right=node;return child;}static Node RotateRightLeft(Node node){Node child=node.Right;Node grandChild=child.Left;node.Right=grandChild.Left;grandChild.Left=node;child.Left=grandChild.Right;grandChild.Right=child;return grandChild;}void ReplaceChildOrRoot(Node parent,Node child,Node newChild){if(parent!=null){if(parent.Left==child){parent.Left=newChild;}else{parent.Right=newChild;}}else{root=newChild;}}static TreeRotation GetRotation(Node parent,Node current,Node sibling){if(IsNonNullRed(sibling.Left)){if(parent.Left==current){return TreeRotation.RightLeft;}return TreeRotation.Right;}else{if(parent.Left==current){return TreeRotation.Left;}return TreeRotation.LeftRight;}}public struct ValueEnumerator:IEnumerator<KeyValuePair<TKey,TValue>>{private Enumerator inner;internal ValueEnumerator(SetDictionary<TKey,TValue,TOp>set){inner=new Enumerator(set);}internal ValueEnumerator(SetDictionary<TKey,TValue,TOp>set,bool reverse,Node startNode){inner=new Enumerator(set,reverse,startNode);}public KeyValuePair<TKey,TValue>Current=>inner.Current switch{{}cur=>cur.Pair,_=>default,};object IEnumerator.Current=>Current;public void Dispose(){}public bool MoveNext()=>inner.MoveNext();public void Reset()=>throw new NotSupportedException();}public struct Enumerator:IEnumerator<Node>{readonly SetDictionary<TKey,TValue,TOp>tree;readonly Stack<Node>stack;Node current;readonly bool reverse;internal Enumerator(SetDictionary<TKey,TValue,TOp>set):this(set,false,null){}internal Enumerator(SetDictionary<TKey,TValue,TOp>set,bool reverse,Node startNode){tree=set;stack=new Stack<Node>(2*Log2(tree.Count+1));current=null;this.reverse=reverse;if(startNode==null)IntializeAll();else Intialize(startNode);}void IntializeAll(){var node=tree.root;while(node!=null){var next=reverse?node.Right:node.Left;stack.Push(node);node=next;}}void Intialize(Node startNode){if(startNode==null)throw new InvalidOperationException(nameof(startNode)+"is null");current=null;var node=startNode;var list=new List<Node>(Log2(tree.Count+1));var comparer=tree.comparer;if(reverse){while(node!=null){list.Add(node);var parent=node.Parent;if(parent==null||parent.Left==node){node=parent;break;}node=parent;}while(node!=null){var parent=node.Parent;if(parent==null||parent.Right==node){node=parent;break;}node=parent;}while(node!=null){if(comparer.Compare(startNode.Key,node.Key)>=0)list.Add(node);node=node.Parent;}}else{while(node!=null){list.Add(node);var parent=node.Parent;if(parent==null||parent.Right==node){node=parent;break;}node=parent;}while(node!=null){var parent=node.Parent;if(parent==null||parent.Left==node){node=parent;break;}node=parent;}while(node!=null){if(comparer.Compare(startNode.Key,node.Key)<=0)list.Add(node);node=node.Parent;}}list.Reverse();foreach(var n in list)stack.Push(n);}[MethodImpl(MethodImplOptions.AggressiveInlining)]static int Log2(int num)=>BitOperations.Log2((uint)num)+1;public Node Current=>current;public bool MoveNext(){if(stack.Count==0){current=null;return false;}current=stack.Pop();var node=reverse?current.Left:current.Right;while(node!=null){var next=reverse?node.Right:node.Left;stack.Push(node);node=next;}return true;}object IEnumerator.Current=>Current;public void Dispose(){}public void Reset()=>throw new NotSupportedException();}public class Node{public bool IsRed;public TKey Key;public TValue Value;public KeyValuePair<TKey,TValue>Pair=>KeyValuePair.Create(Key,Value);public Node Parent{get;private set;}Node _left;public Node Left{get{return _left;}set{_left=value;if(value!=null)value.Parent=this;for(var cur=this;cur!=null;cur=cur.Parent){if(!cur.UpdateSize())break;if(cur.Parent!=null&&cur.Parent.Left!=cur&&cur.Parent.Right!=cur){cur.Parent=null;break;}}}}Node _right;public Node Right{get{return _right;}set{_right=value;if(value!=null)value.Parent=this;for(var cur=this;cur!=null;cur=cur.Parent){if(!cur.UpdateSize())break;if(cur.Parent!=null&&cur.Parent.Left!=cur&&cur.Parent.Right!=cur){cur.Parent=null;break;}}}}public int Size{get;private set;}=1;public Node(KeyValuePair<TKey,TValue>pair,bool isRed){Key=pair.Key;Value=pair.Value;IsRed=isRed;}public Node(TKey key,TValue value,bool isRed){Key=key;Value=value;IsRed=isRed;}public bool UpdateSize(){var oldsize=Size;var size=1;if(Left!=null)size+=Left.Size;if(Right!=null)size+=Right.Size;Size=size;return oldsize!=size;}public override string ToString()=>$"Key = {Key}, Value = {Value}, Size = {Size}";}enum TreeRotation:byte{Left=1,Right=2,RightLeft=3,LeftRight=4,}private class DebugView{private readonly ICollection<KeyValuePair<TKey,TValue>>collection;public DebugView(SetDictionary<TKey,TValue,TOp>collection){this.collection=collection;}public KeyValuePair<TKey,TValue>[]Items=>collection.ToArray();}}}
namespace AtCoder{using static MethodImplOptions;public static class ArrayExtension{[MethodImpl(AggressiveInlining)]public static T[]Fill<T>(this T[]arr,T value){arr.AsSpan().Fill(value);return arr;}[MethodImpl(AggressiveInlining)]public static T[]Sort<T>(this T[]arr){Array.Sort(arr);return arr;}[MethodImpl(AggressiveInlining)]public static string[]Sort(this string[]arr)=>Sort(arr,StringComparer.Ordinal);[MethodImpl(AggressiveInlining)]public static T[]Sort<T,U>(this T[]arr,Expression<Func<T,U>>selector)where U:IComparable<U> =>Sort(arr,ExComparer<T>.CreateExp(selector));[MethodImpl(AggressiveInlining)]public static T[]Sort<T>(this T[]arr,Comparison<T>comparison){Array.Sort(arr,comparison);return arr;}[MethodImpl(AggressiveInlining)]public static T[]Sort<T>(this T[]arr,IComparer<T>comparer){Array.Sort(arr,comparer);return arr;}[MethodImpl(AggressiveInlining)]public static T[]Reverse<T>(this T[]arr){Array.Reverse(arr);return arr;}[MethodImpl(AggressiveInlining)]public static ref T Get<T>(this T[]arr,int index){if(index<0)return ref arr[arr.Length+index];return ref arr[index];}[MethodImpl(AggressiveInlining)]public static ref T GetOrDummy<T>(this T[]arr,int index,T dummy=default){if((uint)index<(uint)arr.Length)return ref arr[index];Dummy<T>.dummy=dummy;return ref Dummy<T>.dummy;}private static class Dummy<T>{public static T dummy;}}}
internal partial class Program{static void Main()=>new Program(new PropertyConsoleReader(),new ConsoleWriter()).Run();public PropertyConsoleReader cr;public ConsoleWriter cw;public Program(PropertyConsoleReader r,ConsoleWriter w){this.cr=r;this.cw=w;CultureInfo.CurrentCulture=CultureInfo.InvariantCulture;}public void Run(){int Q=1;if(__ManyTestCases())Q=cr;for(;Q>0;Q--){var res=Calc();if(res is double d)cw.WriteLine(d.ToString("0.####################",CultureInfo.InvariantCulture));else if(res is bool b)WriteBool(b);else if(res!=null)cw.WriteLine(res.ToString());}cw.Flush();}partial void WriteBool(bool b);object Calc(Program dum=null)=>dum;bool __ManyTestCases(Program dum=null)=>false;}
namespace Kzrnm.Competitive.IO{public partial class ConsoleWriter:IDisposable{private const int DefaultBufferSize=1<<12;public StreamWriter StreamWriter{get;}public ConsoleWriter():this(Console.OpenStandardOutput(),Console.OutputEncoding,DefaultBufferSize){}public ConsoleWriter(Stream output,Encoding encoding):this(output,encoding,DefaultBufferSize){}public ConsoleWriter(Stream output,Encoding encoding,int bufferSize){StreamWriter=new StreamWriter(output,encoding,bufferSize);}public void Flush()=>StreamWriter.Flush();public ConsoleWriter WriteLine<T>(T obj){StreamWriter.WriteLine(obj.ToString());return this;}public ConsoleWriter WriteLineJoin<T>(IEnumerable<T>col)=>WriteMany(' ',col);public ConsoleWriter WriteLineJoin<T1,T2>((T1,T2)tuple)=>WriteLineJoin(tuple.Item1,tuple.Item2);public ConsoleWriter WriteLineJoin<T1,T2,T3>((T1,T2,T3)tuple)=>WriteLineJoin(tuple.Item1,tuple.Item2,tuple.Item3);public ConsoleWriter WriteLineJoin<T1,T2,T3,T4>((T1,T2,T3,T4)tuple)=>WriteLineJoin(tuple.Item1,tuple.Item2,tuple.Item3,tuple.Item4);public ConsoleWriter WriteLineJoin<TTuple>(TTuple tuple)where TTuple:ITuple{var col=new object[tuple.Length];for(int i=0;i<col.Length;i++)col[i]=tuple[i];return WriteLineJoin(col);}public ConsoleWriter WriteLineJoin(params object[]col)=>WriteMany(' ',col);public ConsoleWriter WriteLineJoin<T1,T2>(T1 v1,T2 v2){StreamWriter.Write(v1.ToString());StreamWriter.Write(' ');StreamWriter.WriteLine(v2.ToString());return this;}public ConsoleWriter WriteLineJoin<T1,T2,T3>(T1 v1,T2 v2,T3 v3){StreamWriter.Write(v1.ToString());StreamWriter.Write(' ');StreamWriter.Write(v2.ToString());StreamWriter.Write(' ');StreamWriter.WriteLine(v3.ToString());return this;}public ConsoleWriter WriteLineJoin<T1,T2,T3,T4>(T1 v1,T2 v2,T3 v3,T4 v4){StreamWriter.Write(v1.ToString());StreamWriter.Write(' ');StreamWriter.Write(v2.ToString());StreamWriter.Write(' ');StreamWriter.Write(v3.ToString());StreamWriter.Write(' ');StreamWriter.WriteLine(v4.ToString());return this;}public ConsoleWriter WriteLines<T>(IEnumerable<T>col)=>WriteMany('\n',col);public ConsoleWriter WriteLineGrid<T>(IEnumerable<IEnumerable<T>>cols){foreach(var col in cols)WriteLineJoin(col);return this;}protected ConsoleWriter WriteMany<T>(char sep,IEnumerable<T>col){var en=col.GetEnumerator();if(!en.MoveNext())return this;StreamWriter.Write(en.Current.ToString());while(en.MoveNext()){StreamWriter.Write(sep);StreamWriter.Write(en.Current.ToString());}StreamWriter.WriteLine();return this;}public void Dispose()=>Flush();}}
namespace Kzrnm.Competitive.IO{public partial class ConsoleWriter{public ConsoleWriter WriteLine(ReadOnlySpan<char>obj){StreamWriter.WriteLine(obj);return this;}public ConsoleWriter WriteLineJoin<T>(Span<T>col)=>WriteMany(' ',(ReadOnlySpan<T>)col);public ConsoleWriter WriteLineJoin<T>(ReadOnlySpan<T>col)=>WriteMany(' ',col);public ConsoleWriter WriteLines<T>(Span<T>col)=>WriteMany('\n',(ReadOnlySpan<T>)col);public ConsoleWriter WriteLines<T>(ReadOnlySpan<T>col)=>WriteMany('\n',col);protected ConsoleWriter WriteMany<T>(char sep,ReadOnlySpan<T>col){var en=col.GetEnumerator();if(!en.MoveNext())return this;StreamWriter.Write(en.Current.ToString());while(en.MoveNext()){StreamWriter.Write(sep);StreamWriter.Write(en.Current.ToString());}StreamWriter.WriteLine();return this;}}}
namespace Kzrnm.Competitive.IO{using static MethodImplOptions;public class PropertyConsoleReader{private const int BufSize=1<<12;private readonly Stream input;private readonly Encoding encoding;internal readonly byte[]buffer=new byte[BufSize];internal int pos=0;internal int len=0;public PropertyConsoleReader():this(Console.OpenStandardInput(),Console.InputEncoding){}public PropertyConsoleReader(Stream input,Encoding encoding){this.input=input;this.encoding=encoding;}[MethodImpl(AggressiveInlining)]protected internal void MoveNext(){if( ++pos>=len){len=input.Read(buffer,0,buffer.Length);if(len==0){buffer[0]=10;}pos=0;}}public int Int{[MethodImpl(AggressiveInlining)]get{int res=0;bool neg=false;while(buffer[pos]<48){neg=buffer[pos]==45;MoveNext();}do{res=checked(res*10+(buffer[pos]^48));MoveNext();}while(48<=buffer[pos]);return neg?-res:res;}}public int Int0=>Int-1;public long Long{[MethodImpl(AggressiveInlining)]get{long res=0;bool neg=false;while(buffer[pos]<48){neg=buffer[pos]==45;MoveNext();}do{res=res*10+(buffer[pos]^48U);MoveNext();}while(48<=buffer[pos]);return neg?-res:res;}}public long Long0=>Long-1;public ulong ULong{[MethodImpl(AggressiveInlining)]get{ulong res=0;while(buffer[pos]<48)MoveNext();do{res=res*10+(buffer[pos]^48U);MoveNext();}while(48<=buffer[pos]);return res;}}public ulong ULong0=>ULong-1;public string String{[MethodImpl(AggressiveInlining)]get{var sb=new List<byte>();while(buffer[pos]<=32)MoveNext();do{sb.Add(buffer[pos]);MoveNext();}while(32<buffer[pos]);return encoding.GetString(sb.ToArray());}}public string Ascii{[MethodImpl(AggressiveInlining)]get{var sb=new StringBuilder();while(buffer[pos]<=32)MoveNext();do{sb.Append((char)buffer[pos]);MoveNext();}while(32<buffer[pos]);return sb.ToString();}}public string Line{[MethodImpl(AggressiveInlining)]get{var sb=new List<byte>();while(buffer[pos]<=32)MoveNext();do{sb.Add(buffer[pos]);MoveNext();}while(buffer[pos]!=10&&buffer[pos]!=13);return encoding.GetString(sb.ToArray());}}public char Char{[MethodImpl(AggressiveInlining)]get{while(buffer[pos]<=32)MoveNext();char res=(char)buffer[pos];MoveNext();return res;}}public double Double=>double.Parse(Ascii);public static implicit operator int(PropertyConsoleReader cr)=>cr.Int;public static implicit operator long(PropertyConsoleReader cr)=>cr.Long;public static implicit operator ulong(PropertyConsoleReader cr)=>cr.ULong;public static implicit operator double(PropertyConsoleReader cr)=>cr.Double;public static implicit operator string(PropertyConsoleReader cr)=>cr.Ascii;}}
namespace Kzrnm.Competitive.IO{public struct PropertyRepeatReader{internal readonly PropertyConsoleReader cr;internal readonly int count;internal PropertyRepeatReader(PropertyConsoleReader cr,int count){this.cr=cr;this.count=count;}public string[]Line{get{var arr=new string[count];for(var i=0;i<count;i++)arr[i]=cr.Line;return arr;}}public string[]String{get{var arr=new string[count];for(var i=0;i<count;i++)arr[i]=cr.String;return arr;}}public string[]Ascii{get{var arr=new string[count];for(var i=0;i<count;i++)arr[i]=cr.Ascii;return arr;}}public int[]Int{get{var arr=new int[count];for(var i=0;i<count;i++)arr[i]=cr.Int;return arr;}}public int[]Int0{get{var arr=new int[count];for(var i=0;i<count;i++)arr[i]=cr.Int0;return arr;}}public long[]Long{get{var arr=new long[count];for(var i=0;i<count;i++)arr[i]=cr.Long;return arr;}}public long[]Long0{get{var arr=new long[count];for(var i=0;i<count;i++)arr[i]=cr.Long0;return arr;}}public ulong[]ULong{get{var arr=new ulong[count];for(var i=0;i<count;i++)arr[i]=cr.ULong;return arr;}}public ulong[]ULong0{get{var arr=new ulong[count];for(var i=0;i<count;i++)arr[i]=cr.ULong0;return arr;}}public double[]Double{get{var arr=new double[count];for(var i=0;i<count;i++)arr[i]=cr.Double;return arr;}}public static implicit operator string[](PropertyRepeatReader rr)=>rr.Ascii;public static implicit operator int[](PropertyRepeatReader rr)=>rr.Int;public static implicit operator long[](PropertyRepeatReader rr)=>rr.Long;public static implicit operator ulong[](PropertyRepeatReader rr)=>rr.ULong;public static implicit operator double[](PropertyRepeatReader rr)=>rr.Double;}public static class PRepeatEx{public static PropertyRepeatReader Repeat(this PropertyConsoleReader cr,int count)=>new PropertyRepeatReader(cr,count);}}
namespace Kzrnm.Competitive.IO{public static class PropertyRepeatReaderSelectArray{public static(T1[],T2[])SelectArray<T1,T2>(this PropertyRepeatReader r,Func<PropertyConsoleReader,(T1,T2)>factory){var arr1=new T1[r.count];var arr2=new T2[r.count];for(var i=0;i<r.count;i++)(arr1[i],arr2[i])=factory(r.cr);return(arr1,arr2);}public static(T1[],T2[])SelectArray<T1,T2>(this PropertyRepeatReader r,Func<PropertyConsoleReader,int,(T1,T2)>factory){var arr1=new T1[r.count];var arr2=new T2[r.count];for(var i=0;i<r.count;i++)(arr1[i],arr2[i])=factory(r.cr,i);return(arr1,arr2);}public static(T1[],T2[],T3[])SelectArray<T1,T2,T3>(this PropertyRepeatReader r,Func<PropertyConsoleReader,(T1,T2,T3)>factory){var arr1=new T1[r.count];var arr2=new T2[r.count];var arr3=new T3[r.count];for(var i=0;i<r.count;i++)(arr1[i],arr2[i],arr3[i])=factory(r.cr);return(arr1,arr2,arr3);}public static(T1[],T2[],T3[])SelectArray<T1,T2,T3>(this PropertyRepeatReader r,Func<PropertyConsoleReader,int,(T1,T2,T3)>factory){var arr1=new T1[r.count];var arr2=new T2[r.count];var arr3=new T3[r.count];for(var i=0;i<r.count;i++)(arr1[i],arr2[i],arr3[i])=factory(r.cr,i);return(arr1,arr2,arr3);}public static(T1[],T2[],T3[],T4[])SelectArray<T1,T2,T3,T4>(this PropertyRepeatReader r,Func<PropertyConsoleReader,(T1,T2,T3,T4)>factory){var arr1=new T1[r.count];var arr2=new T2[r.count];var arr3=new T3[r.count];var arr4=new T4[r.count];for(var i=0;i<r.count;i++)(arr1[i],arr2[i],arr3[i],arr4[i])=factory(r.cr);return(arr1,arr2,arr3,arr4);}public static(T1[],T2[],T3[],T4[])SelectArray<T1,T2,T3,T4>(this PropertyRepeatReader r,Func<PropertyConsoleReader,int,(T1,T2,T3,T4)>factory){var arr1=new T1[r.count];var arr2=new T2[r.count];var arr3=new T3[r.count];var arr4=new T4[r.count];for(var i=0;i<r.count;i++)(arr1[i],arr2[i],arr3[i],arr4[i])=factory(r.cr,i);return(arr1,arr2,arr3,arr4);}}}
namespace AtCoder.Internal{public static class InternalBit{[MethodImpl(MethodImplOptions.AggressiveInlining)]public static int ExtractLowestSetBit(int n){if(Bmi1.IsSupported){return(int)Bmi1.ExtractLowestSetBit((uint)n);}return n&-n;}[MethodImpl(MethodImplOptions.AggressiveInlining)]public static int BSF(uint n){return BitOperations.TrailingZeroCount(n);}public static int CeilPow2(int n){var un=(uint)n;if(un<=1)return 0;return BitOperations.Log2(un-1)+1;}}}
namespace AtCoder{public struct DefaultComparerStruct<T>:IComparer<T>where T:IComparable<T>{public static DefaultComparerStruct<T>Default{get;}=default;public int Compare(T x,T y)=>x.CompareTo(y);public override bool Equals(object obj)=>obj is ReverseComparerStruct<T>;public override int GetHashCode()=>GetType().GetHashCode();}}
namespace AtCoder{public static class ExComparer<T>{class ExpressionComparer<K>:IComparer<T>where K:IComparable<K>{private class ParameterReplaceVisitor:ExpressionVisitor{private readonly ParameterExpression from;private readonly ParameterExpression to;public ParameterReplaceVisitor(ParameterExpression from,ParameterExpression to){this.from=from;this.to=to;}protected override Expression VisitParameter(ParameterExpression node)=>node==from?to:base.VisitParameter(node);}readonly Comparison<T>func;public ExpressionComparer(Expression<Func<T,K>>expression){var paramA=expression.Parameters[0];var paramB=Expression.Parameter(typeof(T));var f2=(Expression<Func<T,K>>)new ParameterReplaceVisitor(expression.Parameters[0],paramB).Visit(expression);var compExp=Expression.Lambda<Comparison<T>>(Expression.Call(expression.Body,typeof(K).GetMethod(nameof(IComparable<K>.CompareTo),new[]{typeof(K)}),f2.Body),paramA,paramB);this.func=compExp.Compile();}public int Compare(T x,T y)=>func(x,y);public override bool Equals(object obj)=>obj is ExpressionComparer<K>c&&this.func==c.func;public override int GetHashCode()=>func.GetHashCode();}public static IComparer<T>CreateExp<K>(Expression<Func<T,K>>expression)where K:IComparable<K> =>new ExpressionComparer<K>(expression);}}
namespace AtCoder{public struct ReverseComparerStruct<T>:IComparer<T>where T:IComparable<T>{public static ReverseComparerStruct<T>Default{get;}=default;public int Compare(T x,T y)=>y.CompareTo(x);public override bool Equals(object obj)=>obj is ReverseComparerStruct<T>;public override int GetHashCode()=>GetType().GetHashCode();}}
#endregion Expanded by https://github.com/naminodarie/SourceExpander
Submission Info
| Submission Time |
|
| Task |
fish - 魚 |
| User |
kzrnm |
| Language |
C# (.NET Core 3.1.201) |
| Score |
100 |
| Code Size |
40480 Byte |
| Status |
AC |
| Exec Time |
1014 ms |
| Memory |
53388 KiB |
Judge Result
| Set Name |
Set01 |
Set02 |
Set03 |
Set04 |
Set05 |
Set06 |
Set07 |
Set08 |
Set09 |
| Score / Max Score |
5 / 5 |
5 / 5 |
5 / 5 |
15 / 15 |
10 / 10 |
15 / 15 |
15 / 15 |
15 / 15 |
15 / 15 |
| Status |
|
|
|
|
|
|
|
|
|
| Set Name |
Test Cases |
| Set01 |
01-01, 01-02, 01-03, 01-04, 01-05 |
| Set02 |
02-01, 02-02 |
| Set03 |
03-01, 03-02, 03-03 |
| Set04 |
04-01, 04-02, 04-03, 04-04 |
| Set05 |
05-01, 05-02, 05-03, 05-04, 05-05, 05-06, 05-07 |
| Set06 |
06-01, 06-02, 06-03, 06-04 |
| Set07 |
07-01, 07-02, 07-03, 07-04 |
| Set08 |
08-01, 08-02, 08-03, 08-04 |
| Set09 |
09-01, 09-02, 09-03, 09-04, 09-05, 09-06 |
| Case Name |
Status |
Exec Time |
Memory |
| 01-01 |
AC |
90 ms |
27320 KiB |
| 01-02 |
AC |
108 ms |
27244 KiB |
| 01-03 |
AC |
87 ms |
27196 KiB |
| 01-04 |
AC |
85 ms |
27064 KiB |
| 01-05 |
AC |
80 ms |
27320 KiB |
| 02-01 |
AC |
90 ms |
27372 KiB |
| 02-02 |
AC |
89 ms |
27472 KiB |
| 03-01 |
AC |
94 ms |
27464 KiB |
| 03-02 |
AC |
88 ms |
27700 KiB |
| 03-03 |
AC |
89 ms |
27484 KiB |
| 04-01 |
AC |
101 ms |
28668 KiB |
| 04-02 |
AC |
88 ms |
28452 KiB |
| 04-03 |
AC |
93 ms |
28612 KiB |
| 04-04 |
AC |
93 ms |
28544 KiB |
| 05-01 |
AC |
102 ms |
30432 KiB |
| 05-02 |
AC |
95 ms |
30284 KiB |
| 05-03 |
AC |
97 ms |
30216 KiB |
| 05-04 |
AC |
101 ms |
30788 KiB |
| 05-05 |
AC |
93 ms |
30220 KiB |
| 05-06 |
AC |
100 ms |
30656 KiB |
| 05-07 |
AC |
97 ms |
29952 KiB |
| 06-01 |
AC |
564 ms |
48096 KiB |
| 06-02 |
AC |
572 ms |
47056 KiB |
| 06-03 |
AC |
514 ms |
47456 KiB |
| 06-04 |
AC |
541 ms |
47476 KiB |
| 07-01 |
AC |
735 ms |
50700 KiB |
| 07-02 |
AC |
735 ms |
49332 KiB |
| 07-03 |
AC |
746 ms |
50800 KiB |
| 07-04 |
AC |
552 ms |
49052 KiB |
| 08-01 |
AC |
833 ms |
52092 KiB |
| 08-02 |
AC |
925 ms |
51756 KiB |
| 08-03 |
AC |
900 ms |
52328 KiB |
| 08-04 |
AC |
902 ms |
51932 KiB |
| 09-01 |
AC |
1014 ms |
53388 KiB |
| 09-02 |
AC |
921 ms |
51792 KiB |
| 09-03 |
AC |
710 ms |
51132 KiB |
| 09-04 |
AC |
947 ms |
51976 KiB |
| 09-05 |
AC |
729 ms |
51100 KiB |
| 09-06 |
AC |
85 ms |
27104 KiB |