Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <iostream>
- #include <algorithm>
- #include <utility>
- #define mp make_pair
- #define pli pair<long long, int>
- typedef long long lli;
- using namespace std;
- int n, s;
- pli arr[100003];
- int main(){
- cin >> n >> s;
- for(int i = 0; i < n; i++){
- cin >> arr[i].first;
- arr[i].second = i+1;
- }
- int best = 0;
- lli bprice = 0;
- int prevk = 0;
- int lo = 0, hi = n;
- while(lo <= hi){
- int k = (lo+hi)/2;
- for(int i = 0; i < n; i++){
- arr[i].first += arr[i].second*(k-prevk);
- }
- sort(arr, arr+n);
- lli tot = 0;
- for(int i = 0; i < k; i++){
- tot += arr[i].first;
- }
- if(tot > s){
- hi = k-1;
- }else{
- if(k > best){
- best = k;
- bprice = tot;
- }
- lo = k+1;
- }
- prevk = k;
- }
- cout << best << " " << bprice << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement