Advertisement
_rashed

SPOJ ABA12E

Feb 24th, 2022
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. #define ll long long
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. const int OO = 1e9;
  6. const double EPS = 1e-9;
  7.  
  8. ll arr[50001];
  9. ll pre[50001];
  10. ll n,k;
  11.  
  12.  
  13. int main()
  14. {
  15.     ios_base::sync_with_stdio(false);
  16.     cin.tie(NULL);
  17.     cout.tie(NULL);
  18.     cin >> n >> k;
  19.     for(int i = 1; i <= n; i++) {
  20.         cin >> arr[i];
  21.         pre[i] = pre[i-1] + arr[i];
  22.     }
  23.     /*ll mid = 15;
  24.     ll after = 0;
  25.     ll before = 0;
  26.     for(int i = 1; i <= n; i++) {
  27.         //before += lower_bound(pre+i,pre+n+1,mid+pre[i-1]) - (pre+i);
  28.         after += (pre+n+1) - lower_bound(pre+i,pre+n+1,mid+pre[i-1]+1);
  29.         before += upper_bound(pre+i,pre+n+1,mid+pre[i-1]-1)-(pre+i);
  30.     }
  31.     cout << "before is " << before << " after is " << after << "\n";*/
  32.     ll low = *min_element(arr+1,arr+n+1);
  33.     ll high = pre[n];
  34.     ll possible = (n*(n+1))/2;
  35.     while(low <= high) {
  36.         ll mid = (high+low)/2;
  37.         ll before = 0;
  38.         ll after = 0;
  39.         for(int i = 1; i <= n; i++) {
  40.             //before += lower_bound(pre+i,pre+n+1,mid+pre[i-1]) - (pre+i);
  41.             after += (pre+n+1) - lower_bound(pre+i,pre+n+1,mid+pre[i-1]+1);
  42.             before += upper_bound(pre+i,pre+n+1,mid+pre[i-1]-1)-(pre+i);
  43.         }
  44.         ll times = possible - after - before;
  45.         //cout << "before is " << before << " times is " << times << " at low = " << low << " high = " << high << " mid = " << mid << "\n";
  46.         if(before+1 <= k && before+times >= k) {
  47.             cout << mid << "\n";
  48.             break;
  49.         }
  50.         else if(before+times < k) {
  51.             low = mid+1;
  52.         }
  53.         else {
  54.             high = mid-1;
  55.         }
  56.     }
  57.     return 0;
  58. }
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement