1. #include <iostream>
    2. #include <string>
    3. #include <map>
    4. using namespace std;
    5. #define SIZE 100
    6. map<int, int> f, u;
    7. void request(int ms)
    8. {
    9. if (ms == 0)
    10. {
    11. cout << "errro" << endl;
    12. return ;
    13. }
    14. bool bsuccess = false;
    15. for (auto it = f.begin(); it != f.end(); it ++)
    16. {
    17. // find bigger free mem
    18. if (ms <= it->second)
    19. {
    20. int a = it->first + ms, b = it->second - ms;
    21. cout << it->first << endl;
    22. // update used mem
    23. u.insert({it->first, ms});
    24. // erase old mem
    25. f.erase(it);
    26. // insert new
    27. f.insert({a, b});
    28. bsuccess = true;
    29. break;
    30. }
    31. }
    32. if (!bsuccess) cout << "error" << endl;
    33. }
    34. void release(int ms)
    35. {
    36. auto iter = u.find(ms);
    37. if (iter == u.end())
    38. {
    39. cout << "error" << endl;
    40. return ;
    41. }
    42. int e = iter->first + iter->second;
    43. bool bfind = false;
    44. for (auto it = f.begin(); it != f.end(); it ++)
    45. {
    46. if (e == it->first)
    47. {
    48. int a = iter->first, b = it->second + iter->second;
    49. f.insert({a, b});
    50. f.erase(it);
    51. bfind = true;
    52. }
    53. }
    54. if (!bfind) f.insert({iter->first, iter->second});
    55. else
    56. {
    57. auto pre = f.begin();
    58. for (auto it = f.begin(); it != f.end(); it ++)
    59. {
    60. if (it == f.begin()) continue;
    61. if (pre->first + pre->second == it->first)
    62. {
    63. pre->second += it->second;
    64. f.erase(it);
    65. break;
    66. }
    67. pre = it;
    68. }
    69. }
    70. u.erase(iter);
    71. }
    72. int getNum(const string& s)
    73. {
    74. int i=0;
    75. while (s[i] != '=') i++;
    76. i++;
    77. int num = 0;
    78. while (i < s.size())
    79. num = num * 10 + (int)(s[i] - '0'), i++;
    80. return num;
    81. }
    82. int main()
    83. {
    84. f.insert({0, SIZE});
    85. int n;
    86. cin >> n;
    87. string op;
    88. while (n--)
    89. {
    90. cin >> op;
    91. int ms = getNum(op);
    92. if (op[2] == 'Q')
    93. request(ms);
    94. else
    95. release(ms);
    96. }
    97. return 0;
    98. }