fork(1) download
  1. using System;
  2. using System.Diagnostics;
  3.  
  4. public class StackClass
  5. {
  6. private int[] data = new int[100000001];
  7. private int[] add = new int[100000001];
  8. private int inc = 0;
  9. private int i = -1;
  10.  
  11. public void Push(int x)
  12. {
  13. if (i >= 0) add[i] += inc;
  14. inc = 0;
  15. data[++i] = x;
  16. }
  17.  
  18. public int Pop()
  19. {
  20. inc += add[i];
  21. add[i] = 0;
  22. return data[i--] + inc;
  23. }
  24.  
  25. public void Inc(int r, int delta)
  26. {
  27. if (r <= i)
  28. add[r] += delta;
  29. else
  30. inc += delta;
  31. }
  32. }
  33.  
  34. public class Test
  35. {
  36. public static void Main()
  37. {
  38. var watch = new Stopwatch();
  39. var stack = new StackClass();
  40.  
  41. var count = 100000001;
  42.  
  43. watch.Start();
  44. for (int i = 0; i < count; i++)
  45. {
  46. stack.Push(i);
  47. }
  48. Console.WriteLine(watch.Elapsed);
  49. watch.Restart();
  50.  
  51. for (int i = 0; i < count; i++)
  52. {
  53. stack.Inc(i, 2);
  54. }
  55. Console.WriteLine(watch.Elapsed);
  56. watch.Restart();
  57.  
  58. for (int i = 0; i < count; i++)
  59. {
  60. stack.Pop();
  61. }
  62. Console.WriteLine(watch.Elapsed);
  63. }
  64. }
Success #stdin #stdout 1.38s 29672KB
stdin
Standard input is empty
stdout
00:00:00.5797480
00:00:00.3059362
00:00:00.4621549