// template taken from Striver_79
// Remember you were also a novice when you started
// hence never be rude to anyone who wants to learn something
// Never open a ranklist untill and unless you are done with solving problems, wastes 3/4 minuts
// Donot treat CP as a placement thing, love it and enjoy it, you will succeed for sure.
// The goal is to solve problems most efficiently not just barely
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
using namespace __gnu_pbds;
typedef tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
const int mod = 1e9 + 7;
#define int long long
typedef long long ll;
typedef vector<ll> vi;
typedef vector<vector<int>> vii;
typedef vector<pair<int, int>> vpi;
typedef pair<int, int> pi;
void myerase(ordered_set &t, int v)
{
int rank = t.order_of_key(v); // Number of elements that are less than v in t
ordered_set::iterator it = t.find_by_order(rank); // Iterator that points to the (rank+1)th element in t
t.erase(it);
}
int power(long long x, unsigned int y, int p = 1e9 + 7)
{
int res = 1; // Initialize result
x = x % p; // Update x if it is more than or
// equal to p
if (x == 0)
return 0; // In case x is divisible by p;
while (y > 0)
{
// If y is odd, multiply x with result
if (y & 1)
res = (res * x) % p;
// y must be even now
y = y >> 1; // y = y/2
x = (x * x) % p;
}
return res;
}
// C function for extended Euclidean Algorithm (used to
// find modular inverse.
int gcdExtended(int a, int b, int *x, int *y)
{
// Base Case
if (a == 0)
{
*x = 0, *y = 1;
return b;
}
int x1, y1; // To store results of recursive call
int gcd = gcdExtended(b % a, a, &x1, &y1);
// Update x and y using results of recursive
// call
*x = y1 - (b / a) * x1;
*y = x1;
return gcd;
}
int modInverse(int b, int m)
{
int x, y; // used in extended GCD algorithm
int g = gcdExtended(b, m, &x, &y);
// Return -1 if b and m are not co-prime
if (g != 1)
return -1;
// m is added to handle negative x
return (x % m + m) % m;
}
// Function to compute a/b under modulo m
int modDivide(int a, int b, int m)
{
a = a % m;
int inv = modInverse(b, m);
if (inv == -1)
return -1;
else
return (inv * a) % m;
}
ll accurateFloor(ll a, ll b)
{
ll val = a / b;
while (val * b > a)
val--;
return val;
}
bool check(long long mid, vector<int> &arr, int m)
{
long long s = 0;
int start = 0;
int n = arr.size();
long long prev = 0;
for (int i = 0; i < n;)
{
int point = arr[i] - arr[start];
if ((s + point )> mid)
{
m--;
s += prev;
prev = 0;
start = i;
}
else
{
prev = point;
i++;
}
}
return m > 0;
}
void solve()
{
// Do not get stuck on a single approach for long, think of multiple ways
ll n;
cin >> n;
ll m;
cin >> m;
vi arr(n, 0);
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
sort(arr.begin(),arr.end());
if(m==n)
{
cout<<"0\n";
return;
}
int lo=0;
int hi=1e18;
int ans=1e18;
while(lo<=hi)
{
int mid=(lo+hi)/2;
if(check(mid,arr,m))
{
ans=mid;
hi=mid-1;
}
else
{
lo=mid+1;
}
}
cout<<ans<<"\n";
}
int32_t main()
{
// hamare saath shree raghunath to kisi baat ki chinta nahi
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t = 1;
// cin >> t;
while (t--)
{
solve();
}
return 0;
}
Ly8gdGVtcGxhdGUgdGFrZW4gZnJvbSBTdHJpdmVyXzc5Ci8vIFJlbWVtYmVyIHlvdSB3ZXJlIGFsc28gYSBub3ZpY2Ugd2hlbiB5b3Ugc3RhcnRlZAovLyBoZW5jZSBuZXZlciBiZSBydWRlIHRvIGFueW9uZSB3aG8gd2FudHMgdG8gbGVhcm4gc29tZXRoaW5nCi8vIE5ldmVyIG9wZW4gYSByYW5rbGlzdCB1bnRpbGwgYW5kIHVubGVzcyB5b3UgYXJlIGRvbmUgd2l0aCBzb2x2aW5nIHByb2JsZW1zLCB3YXN0ZXMgMy80IG1pbnV0cwovLyBEb25vdCB0cmVhdCBDUCBhcyBhIHBsYWNlbWVudCB0aGluZywgbG92ZSBpdCBhbmQgZW5qb3kgaXQsIHlvdSB3aWxsIHN1Y2NlZWQgZm9yIHN1cmUuCi8vIFRoZSBnb2FsIGlzIHRvIHNvbHZlIHByb2JsZW1zIG1vc3QgZWZmaWNpZW50bHkgbm90IGp1c3QgYmFyZWx5CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgojaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwp0eXBlZGVmIHRyZWU8aW50LCBudWxsX3R5cGUsIGxlc3NfZXF1YWw8aW50PiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4gb3JkZXJlZF9zZXQ7CmNvbnN0IGludCBtb2QgPSAxZTkgKyA3OwojZGVmaW5lIGludCBsb25nIGxvbmcKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgdmVjdG9yPGxsPiB2aTsKdHlwZWRlZiB2ZWN0b3I8dmVjdG9yPGludD4+IHZpaTsKdHlwZWRlZiB2ZWN0b3I8cGFpcjxpbnQsIGludD4+IHZwaTsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaTsKdm9pZCBteWVyYXNlKG9yZGVyZWRfc2V0ICZ0LCBpbnQgdikKewogICAgaW50IHJhbmsgPSB0Lm9yZGVyX29mX2tleSh2KTsgICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIHYgaW4gdAogICAgb3JkZXJlZF9zZXQ6Oml0ZXJhdG9yIGl0ID0gdC5maW5kX2J5X29yZGVyKHJhbmspOyAvLyBJdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgKHJhbmsrMSl0aCBlbGVtZW50IGluIHQKICAgIHQuZXJhc2UoaXQpOwp9CmludCBwb3dlcihsb25nIGxvbmcgeCwgdW5zaWduZWQgaW50IHksIGludCBwID0gMWU5ICsgNykKewogICAgaW50IHJlcyA9IDE7IC8vIEluaXRpYWxpemUgcmVzdWx0CgogICAgeCA9IHggJSBwOyAvLyBVcGRhdGUgeCBpZiBpdCBpcyBtb3JlIHRoYW4gb3IKICAgICAgICAgICAgICAgLy8gZXF1YWwgdG8gcAoKICAgIGlmICh4ID09IDApCiAgICAgICAgcmV0dXJuIDA7IC8vIEluIGNhc2UgeCBpcyBkaXZpc2libGUgYnkgcDsKCiAgICB3aGlsZSAoeSA+IDApCiAgICB7CiAgICAgICAgLy8gSWYgeSBpcyBvZGQsIG11bHRpcGx5IHggd2l0aCByZXN1bHQKICAgICAgICBpZiAoeSAmIDEpCiAgICAgICAgICAgIHJlcyA9IChyZXMgKiB4KSAlIHA7CgogICAgICAgIC8vIHkgbXVzdCBiZSBldmVuIG5vdwogICAgICAgIHkgPSB5ID4+IDE7IC8vIHkgPSB5LzIKICAgICAgICB4ID0gKHggKiB4KSAlIHA7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CgovLyBDIGZ1bmN0aW9uIGZvciBleHRlbmRlZCBFdWNsaWRlYW4gQWxnb3JpdGhtICh1c2VkIHRvCi8vIGZpbmQgbW9kdWxhciBpbnZlcnNlLgppbnQgZ2NkRXh0ZW5kZWQoaW50IGEsIGludCBiLCBpbnQgKngsIGludCAqeSkKewogICAgLy8gQmFzZSBDYXNlCiAgICBpZiAoYSA9PSAwKQogICAgewogICAgICAgICp4ID0gMCwgKnkgPSAxOwogICAgICAgIHJldHVybiBiOwogICAgfQoKICAgIGludCB4MSwgeTE7IC8vIFRvIHN0b3JlIHJlc3VsdHMgb2YgcmVjdXJzaXZlIGNhbGwKICAgIGludCBnY2QgPSBnY2RFeHRlbmRlZChiICUgYSwgYSwgJngxLCAmeTEpOwoKICAgIC8vIFVwZGF0ZSB4IGFuZCB5IHVzaW5nIHJlc3VsdHMgb2YgcmVjdXJzaXZlCiAgICAvLyBjYWxsCiAgICAqeCA9IHkxIC0gKGIgLyBhKSAqIHgxOwogICAgKnkgPSB4MTsKCiAgICByZXR1cm4gZ2NkOwp9CgppbnQgbW9kSW52ZXJzZShpbnQgYiwgaW50IG0pCnsKICAgIGludCB4LCB5OyAvLyB1c2VkIGluIGV4dGVuZGVkIEdDRCBhbGdvcml0aG0KICAgIGludCBnID0gZ2NkRXh0ZW5kZWQoYiwgbSwgJngsICZ5KTsKCiAgICAvLyBSZXR1cm4gLTEgaWYgYiBhbmQgbSBhcmUgbm90IGNvLXByaW1lCiAgICBpZiAoZyAhPSAxKQogICAgICAgIHJldHVybiAtMTsKCiAgICAvLyBtIGlzIGFkZGVkIHRvIGhhbmRsZSBuZWdhdGl2ZSB4CiAgICByZXR1cm4gKHggJSBtICsgbSkgJSBtOwp9CgovLyBGdW5jdGlvbiB0byBjb21wdXRlIGEvYiB1bmRlciBtb2R1bG8gbQppbnQgbW9kRGl2aWRlKGludCBhLCBpbnQgYiwgaW50IG0pCnsKICAgIGEgPSBhICUgbTsKICAgIGludCBpbnYgPSBtb2RJbnZlcnNlKGIsIG0pOwogICAgaWYgKGludiA9PSAtMSkKICAgICAgICByZXR1cm4gLTE7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIChpbnYgKiBhKSAlIG07Cn0KbGwgYWNjdXJhdGVGbG9vcihsbCBhLCBsbCBiKQp7CiAgICBsbCB2YWwgPSBhIC8gYjsKICAgIHdoaWxlICh2YWwgKiBiID4gYSkKICAgICAgICB2YWwtLTsKICAgIHJldHVybiB2YWw7Cn0KYm9vbCBjaGVjayhsb25nIGxvbmcgbWlkLCB2ZWN0b3I8aW50PiAmYXJyLCBpbnQgbSkKewogICAgbG9uZyBsb25nIHMgPSAwOwogICAgaW50IHN0YXJ0ID0gMDsKICAgIGludCBuID0gYXJyLnNpemUoKTsKICAgIGxvbmcgbG9uZyBwcmV2ID0gMDsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47KQogICAgewogICAgICAgIGludCBwb2ludCA9IGFycltpXSAtIGFycltzdGFydF07ICAgIAogICAgICAgIGlmICgocyArIHBvaW50ICk+IG1pZCkKICAgICAgICB7CiAgICAgICAgICAgIG0tLTsKICAgICAgICAgICAgcyArPSBwcmV2OwogICAgICAgICAgICBwcmV2ID0gMDsKICAgICAgICAgICAgc3RhcnQgPSBpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBwcmV2ID0gcG9pbnQ7CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbSA+IDA7Cn0KCnZvaWQgc29sdmUoKQp7CiAgICAvLyBEbyBub3QgZ2V0IHN0dWNrIG9uIGEgc2luZ2xlIGFwcHJvYWNoIGZvciBsb25nLCB0aGluayBvZiBtdWx0aXBsZSB3YXlzCiAgICBsbCBuOwogICAgY2luID4+IG47CiAgICBsbCBtOwogICAgY2luID4+IG07CiAgICB2aSBhcnIobiwgMCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgICBjaW4gPj4gYXJyW2ldOwogICAgfQogICAgc29ydChhcnIuYmVnaW4oKSxhcnIuZW5kKCkpOwogICAgaWYobT09bikKICAgIHsKICAgICAgICBjb3V0PDwiMFxuIjsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbG89MDsKICAgIGludCBoaT0xZTE4OwogICAgaW50IGFucz0xZTE4OwogICAgd2hpbGUobG88PWhpKQogICAgewogICAgICAgIGludCBtaWQ9KGxvK2hpKS8yOwogICAgICAgIGlmKGNoZWNrKG1pZCxhcnIsbSkpCiAgICAgICAgewogICAgICAgICAgICBhbnM9bWlkOwogICAgICAgICAgICBoaT1taWQtMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgbG89bWlkKzE7CiAgICAgICAgfQogICAgfQogICAgY291dDw8YW5zPDwiXG4iOwp9CmludDMyX3QgbWFpbigpCnsKICAgIC8vIGhhbWFyZSBzYWF0aCBzaHJlZSByYWdodW5hdGggdG8ga2lzaSBiYWF0IGtpIGNoaW50YSBuYWhpCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICBpbnQgdCA9IDE7CiAgICAvLyBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pCiAgICB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIHJldHVybiAwOwp9