Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define mp make_pair
  6. #define pb push_back
  7. #define sz(a) (int)(a).size()
  8. #define fori(i,b,e) for(int i = (b); i < (e); i++)
  9. #define forn(i,n) fori(i,0,n)
  10.  
  11. typedef long long int64;
  12. typedef long long LL;
  13. typedef pair<int, int> pii;
  14. typedef vector<int> vi;
  15.  
  16. int getInt() { int x; scanf("%d", &x); return x;}
  17.  
  18. const int maxn = 150100;
  19. int v[maxn], c[maxn], d[maxn];
  20. bool was[maxn];
  21.  
  22. void solve() {
  23. int n = getInt(), k = getInt();
  24. fori(i,0,n) {
  25. v[i] = getInt();
  26. c[i] = getInt();
  27. d[i] = v[i] - c[i];
  28. }
  29. int l = 0, r = 1e6 + 5;
  30. while (r - l > 1) {
  31. int ans = (l + r) >> 1;
  32. bool good = true;
  33. vector<pii> curs;
  34. fori(ttt,0,k+1) {
  35. if (!good)
  36. break;
  37. int mini = -1;
  38. fori(i,0,n) {
  39. if (!was[i] && (mini == -1 || c[i] < c[mini])) {
  40. int lim = sz(curs);
  41. fori(i,0,sz(curs)) {
  42. if (curs[i].second > d[mini]) {
  43. lim = i;
  44. break;
  45. }
  46. }
  47. if (c[i] + (lim == 0 ? 0 : curs[lim-1].first) <= d[i] - ans) {
  48. bool locGood = true;
  49. fori(j,lim,sz(curs)) {
  50. if (curs[j].first + c[i] > curs[j].second - ans) {
  51. locGood = false;
  52. break;
  53. }
  54. }
  55. if (locGood)
  56. mini = i;
  57. }
  58. }
  59. }
  60. if (mini == -1) {
  61. good = false;
  62. break;
  63. }
  64. was[mini] = 1;
  65. int lim = sz(curs);
  66. fori(i,0,sz(curs)) {
  67. if (curs[i].second > d[mini]) {
  68. lim = i;
  69. break;
  70. }
  71. }
  72. curs.insert(curs.begin() + lim, mp(c[mini] + (lim == 0 ? 0 : curs[lim-1].first), d[mini]));
  73. fori(i,lim+1,sz(curs)) {
  74. curs[i].first += c[mini];
  75. }
  76. }
  77. fori(i,0,n)
  78. was[i] = false;
  79. if (good) {
  80. l = ans;
  81. } else {
  82. r = ans;
  83. }
  84. }
  85. printf("%d\n", l);
  86. }
  87.  
  88. int main() {
  89. #ifdef DEBUG
  90. freopen("in.txt", "rt", stdin);
  91. freopen("out.txt", "wt", stdout);
  92. #endif
  93. int n = getInt();
  94. fori(i,0,n)
  95. solve();
  96. return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement