Only Premium Users can view the Question
2. Range Selection
bool ok(vector<ll> starts,ll d,ll m){
     ll st=starts[0]+m;
     for(int i=1;i<starts.size();i++){
         st=max(st,starts[i]);
         if(starts[i]+d<st) return false;
         st+=m;
     }
     return true;
 }
ll solve(vector<ll> &starts,ll d){
     sort(starts.begin(),starts.end());
     ll l=0,r=1e15;
     while(l<=r){
         ll m=(l+r)/2;
         if(ok(starts,d,m)){
             l=m+1;
         }else r=m-1;
     }
     return r;
 }
1. GetMinRemoval
string s;
cin>>s;
int k;
cin>>k;
vector<int> freq(26);
for(int i=0;i<s.size();i++) {
freq[s[i]-'a']++;
}
sort(freq.begin(),freq.end());
int i=0,j=freq.size()-1;
int ans = 0;
while(i<=j) {
if(freq[i]==0) i++;
else if(freq[j]==0) j--;
else if(abs(freq[i]-freq[j])>k) {
ans += abs(freq[i]-freq[j])-k;
j--;
} else break;
}
cout<<ans<<endl;
Q1)
void solve()
{
string s;
int k;
cin >> s >> k;
vector<int> freq(26, 0);
unordered_map<int, int> freqOfFreq;
for (char c : s)
freq[c - 'a']++;
for (int f : freq)
{
freqOfFreq[f]++;
}
sort(all(freq));
int i = 0;
while (i < 26 and freq[i] == 0)
i++;
int j = 25;
int minAns = 0;
while (i < j)
{
if (freq[j] - freq[i] <= k)
break;
if ((freq[j] - freq[i] - k) * freqOfFreq[freq[j]] <= freq[i] * freqOfFreq[freq[i]])
{
minAns += (freq[j] - freq[i] - k) * freqOfFreq[freq[j]];
j -= freqOfFreq[freq[j]];
}
else
{
minAns += freq[i] * freqOfFreq[freq[i]];
i += freqOfFreq[freq[i]];
}
}
cout<< minAns << endl;
}