Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //TIOJ 1208
- /******************************************************************************
- Online C++ Compiler.
- Code, Compile, Run and Debug C++ program online.
- Write your code in this editor and press "Run" button to compile and execute it.
- *******************************************************************************/
- #include <bits/stdc++.h>
- using namespace std;
- int arr[20001], sum[20001];
- int n,k;
- int msort(const int lhs, const int rhs, const int val){
- if(lhs == rhs-1)return (val <= sum[lhs])? 1 : 0;
- int mid = (lhs + rhs) / 2;
- int ret = msort(lhs, mid, val) + msort(mid, rhs, val);
- vector<int> left, right;
- for(int i = lhs; i < mid; ++i)left.emplace_back(sum[i]);
- for(int i = mid; i < rhs; ++i)right.emplace_back(sum[i]);
- for(int i = 0, j = 0; i < left.size(); ++i){
- while(j < right.size() && val > right[j] - left[i])++j;
- ret += right.size() - j;
- }
- for(int i = 0, j = 0; i < left.size(); ++i){
- while(j < right.size() && left[i] > right[j]){
- sum[lhs+i+j] = right[j];
- ++j;
- }
- sum[lhs+i+j] = left[i];
- }
- return ret;
- }
- int cnt(int val){
- for(int i = 1; i <= n; ++i)sum[i] = sum[i-1] + arr[i];
- return msort(1, n+1, val);
- }
- int main(){
- while(cin >> n >> k){
- if(n == 0 && k == 0)break;
- for(int i = 1; i <= n; ++i)cin >> arr[i];
- int big = 2e9, small = -2e9;
- while(big >= small){
- int mid = (big+small) / 2;
- if(cnt(mid) < k)big = mid - 1;
- else small = mid + 1;
- }
- cout << big << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement