Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC optimize("Ofast,unroll-loops")
- #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,mmx,avx,avx2")
- /*HAR HAR MAHADEV
- ヽ`、ヽ``、ヽ`ヽ`、、ヽ `ヽ 、ヽ`🌙`ヽヽ`ヽ、ヽ`
- ヽ`、ヽ``、ヽ 、``、 `、ヽ` 、` ヽ`ヽ、ヽ `、ヽ``、
- ヽ、``、`、ヽ``、 、ヽヽ`、`、、ヽヽ、``、 、 ヽ`、
- ヽ``、 ヽ`ヽ`、、ヽ `ヽ 、 🚶ヽ````ヽヽヽ`、、ヽ`、、ヽ*/
- //think twice code once
- //when its getting hard remember why you started
- # include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef long double ld;
- typedef pair<int, int> pi;
- typedef pair<ll, ll> pl;
- typedef vector<int> vi;
- typedef vector<ld> vd;
- typedef vector<ll> vl;
- typedef vector<pi> vpi;//typedef for datatype and #define for macro
- typedef vector<pl> vpl;
- # define fast ios_base::sync_with_stdio(false);cin.tie(NULL);
- # define MOD 1000000007
- # define endl '\n'
- # define FOR(i, a, b) for (int i=a; i<(b); i++)
- # define F0R(i, a) for (int i=0; i<(a); i++)
- # define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
- # define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)
- # define INF 9e18
- # define PI 3.14159265358979323846
- # define lb lower_bound
- # define ub upper_bound
- # define mp make_pair
- # define pb push_back
- # define fi first
- # define se second
- # define all(a) a.begin(), a.end()
- # define iceil(n, x) (((n) + (x) - 1) / (x))
- ll mod_add(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a + b) % m) + m) % m;}
- ll mod_mul(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a * b) % m) + m) % m;}
- ll mod_sub(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a - b) % m) + m) % m;}
- mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
- vl a(100009, 0);
- map<ll, ll> m;
- ll cost(ll k, ll n)
- {
- vl temp;
- for (ll i = 0; i < n; i++)
- {
- ll aporv = a[i] + (k * (i + 1));
- temp.pb(aporv);
- }
- sort(all(temp));
- ll count = 0;
- for (ll i = 0; i < k; i++)
- {
- count += temp[i];
- }
- // cout << count << endl;
- return count;
- }
- int main()
- {
- fast;
- ll t = 1;
- // cin >> t;
- while (t--)
- {
- ll n, i, s; cin >> n >> s;
- for (i = 0; i < n; i++) cin >> a[i];
- ll l = 1, r = n;
- while (l <= r)
- {
- ll k = l + (r - l) / 2;
- ll count = cost(k, n);
- if (count > s)
- {
- r = (k - 1);
- continue;
- }
- if (count <= s)
- {
- if (m[k] == 0) m[k] = count;
- else m[k] = min(m[k], count);
- l = k + 1;
- continue;
- }
- }
- ll ans1 = 0, ans2 = 0;
- for (auto it = m.rbegin(); it != m.rend(); it++)
- {
- if (it->second != 0)
- {
- ans1 = it->first; //k
- ans2 = it->second; //cost min cost
- break;
- }
- }
- cout << ans1 << " " << ans2 << " " << endl;
- m.clear();
- }
- return 0;
- }
- /* stuff you should look for
- * stack/set/gcd/palindrome/twopointer/slidingwindow
- prefix sum/range query/ patterns/matrices/string
- lexographicaly/xoor/subsequence subarray/overlapping intervals
- factors(rootn) primefactorisation vectorofallfactors dfs bfs msdfs
- lowerbound-point to first element ya toh equal ya toh just bada; (j=lb(all(v),s)-v.begin())
- upperbound- just bada element to the target if not then v.size() return karega dono
- hi case me
- kahi pe bhi in 0 indexing v.begin()+0, se jis index tak jana hai usse ek jyada tak
- availaible snip-dfs,mint,quadraticformula,2dvector
- mytemp,negativemod,primefactorisation
- * int overflow, array bounds
- * special cases (n=1?)
- * do smth instead of nothing and stay organized
- * WRITE STUFF DOWN
- * DON'T GET STUCK ON ONE APPROACH
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement