Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 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. if(need > ct_v) return 0;
  43. for(int i = 0; i < ct_v-need; i++)
  44. sum += v[i];
  45.  
  46. for(int i =ct_v-need; i < ct_v; i++)
  47. sum += val;
  48.  
  49. if(sum <= total) return 1;
  50. return 0;
  51. }
  52.  
  53. int main()
  54. {
  55. int t;
  56. cin>>t;
  57. for(int j = 1; j <= t; j++){
  58. cin>>nr>>total;
  59. for(int i = 1; i <= nr; i++)
  60. cin>>vec[i].left>>vec[i].right;
  61.  
  62. if(nr == 1)
  63. cout<<min(total,vec[nr].right)<<"\n";
  64. else{
  65. sort(vec + 1,vec + nr + 1,cmp);
  66.  
  67. long long sol;
  68. long long st = 0,dr = 1e9;
  69. while(dr - st > 1){
  70. long long mid = (st + dr)/2;
  71. //fout<<mid<<" "<<verif(mid)<<endl;
  72. if(verif(mid)){
  73. sol = mid;
  74. st = mid;
  75. }
  76. else dr = mid;
  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