using System;
using System.Collections.Generic;
using System.Diagnostics;
public class StackClass
{
private List<int> data = new List<int>(100000001);
private List<int> add = new List<int>(100000001);
private int inc = 0;
public void Push(int x)
{
data.Add(x);
add.Add(0);
}
public int Pop()
{
int i = data.Count - 1;
int res = data[i] + (inc += add[i]);
add.RemoveAt(i);
data.RemoveAt(i);
return res;
}
public void Inc(int r, int delta)
{
if (r < add.Count)
add[r] += delta;
else
inc += delta;
}
}
public class Test
{
public static void Main()
{
var watch = new Stopwatch();
var stack = new StackClass();
var count = 100000001;
watch.Start();
for (int i = 0; i < count; i++)
{
stack.Push(i);
}
Console.WriteLine(watch.Elapsed);
watch.Restart();
for (int i = 0; i < count; i++)
{
stack.Inc(i, 2);
}
Console.WriteLine(watch.Elapsed);
watch.Restart();
for (int i = 0; i < count; i++)
{
stack.Pop();
}
Console.WriteLine(watch.Elapsed);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwoKcHVibGljIGNsYXNzIFN0YWNrQ2xhc3MKewoJcHJpdmF0ZSBMaXN0PGludD4gZGF0YSA9IG5ldyBMaXN0PGludD4oMTAwMDAwMDAxKTsKCXByaXZhdGUgTGlzdDxpbnQ+IGFkZCA9IG5ldyBMaXN0PGludD4oMTAwMDAwMDAxKTsKCXByaXZhdGUgaW50IGluYyA9IDA7CgoJcHVibGljIHZvaWQgUHVzaChpbnQgeCkKCXsKCQlkYXRhLkFkZCh4KTsKCQlhZGQuQWRkKDApOwoJfQoJCglwdWJsaWMgaW50IFBvcCgpCgl7CgkJaW50IGkgPSBkYXRhLkNvdW50IC0gMTsKCQlpbnQgcmVzID0gZGF0YVtpXSArIChpbmMgKz0gYWRkW2ldKTsKCQkKCQlhZGQuUmVtb3ZlQXQoaSk7CgkJZGF0YS5SZW1vdmVBdChpKTsKCgkJcmV0dXJuIHJlczsKCX0KCQoJcHVibGljIHZvaWQgSW5jKGludCByLCBpbnQgZGVsdGEpCgl7CgkJaWYgKHIgPCBhZGQuQ291bnQpCgkJCWFkZFtyXSArPSBkZWx0YTsKCQllbHNlCgkJCWluYyArPSBkZWx0YTsKCX0KfQoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCSB2YXIgd2F0Y2ggPSBuZXcgU3RvcHdhdGNoKCk7CgkJIHZhciBzdGFjayA9IG5ldyBTdGFja0NsYXNzKCk7CgkJCgkJIHZhciBjb3VudCA9IDEwMDAwMDAwMTsKCQkKCQkgd2F0Y2guU3RhcnQoKTsKCQkgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQoJCSB7CgkJICAgICBzdGFjay5QdXNoKGkpOwoJCSB9CgkJIENvbnNvbGUuV3JpdGVMaW5lKHdhdGNoLkVsYXBzZWQpOwoJCSB3YXRjaC5SZXN0YXJ0KCk7CgkJCgkJIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKCQkgewoJCSAgICAgc3RhY2suSW5jKGksIDIpOwoJCSB9CgkJIENvbnNvbGUuV3JpdGVMaW5lKHdhdGNoLkVsYXBzZWQpOwoJCSB3YXRjaC5SZXN0YXJ0KCk7CgkJCgkJIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKCQkgewoJCSAgICAgc3RhY2suUG9wKCk7CgkJIH0KCQkgQ29uc29sZS5Xcml0ZUxpbmUod2F0Y2guRWxhcHNlZCk7Cgl9Cn0=