Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define nmax 200001
  3.  
  4. using namespace std;
  5. ifstream fin("p.in");
  6. ofstream fout("p.out");
  7.  
  8. const int N = 1e9;
  9.  
  10. struct salary{
  11. long long left,right;
  12. }vec[nmax];
  13.  
  14. int nr;
  15. long long total;
  16.  
  17. bool cmp(salary a,salary b){
  18. if(a.left == a.right)
  19. return a.right < b.right;
  20. return a.left < b.left;
  21. }
  22.  
  23. bool verif(long long val){
  24. long long sum=0;
  25. int cnt=0;
  26. vector<int>v;
  27.  
  28. for(int i = 1; i <= nr; i++){
  29. if(vec[i].right < val)
  30. sum += vec[i].left;
  31. else if(vec[i].left >= val){
  32. sum += vec[i].left;
  33. cnt++;
  34. }
  35. else {
  36. v.push_back(vec[i].left);
  37. }
  38. }
  39.  
  40. int ct_v = v.size();
  41. int need = max(0,((nr + 1)/2 - cnt));
  42.  
  43. if(need > ct_v) return 0;
  44. for(int i = 0; i < ct_v - need; i++)
  45. sum += v[i];
  46.  
  47. for(int i = ct_v - need; i < ct_v; i++)
  48. sum += val;
  49.  
  50. if(sum <= total) return 1;
  51. return 0;
  52. }
  53.  
  54. int main()
  55. {
  56. int t;
  57. cin>>t;
  58. for(int j = 1; j <= t; j++){
  59. cin>>nr>>total;
  60. for(int i = 1; i <= nr; i++)
  61. cin>>vec[i].left>>vec[i].right;
  62.  
  63. if(nr == 1)
  64. cout<<min(total,vec[nr].right)<<"\n";
  65. else{
  66. sort(vec + 1,vec + nr + 1,cmp);
  67. long long sol;
  68. long long st = 0,dr = 1e9;
  69. while(st <= dr){
  70. long long mid = (st + dr)/2;
  71. //fout<<mid<<" "<<verif(mid)<<endl;
  72. if(verif(mid)){
  73. sol = mid;
  74. st = mid + 1;
  75. }
  76. else dr = mid-1;
  77. }
  78. //fout<<"next\n";
  79. cout<<sol<<"\n";
  80. }
  81. }
  82.  
  83. return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement