#include using namespace std; template class FenwickTree{ private: vector dat; T sum(int r){ T ret = 0; while(r > 0) ret += dat.at(r-1),r -= r&-r; return ret; } public: void make(int N){dat.resize(N);} void add(int pos,T v){ pos++; while(pos <= dat.size()) dat.at(pos-1) += v,pos += pos&-pos; } void imos(int l,int r,T v){add(l,v),add(r,-v);} //[l,r) imos; T rangeans(int l,int r){return sum(r)-sum(l);} T get(int pos){return rangeans(pos,pos+1);} //imosはrange(0,pos+1); }; struct MergeSortTree2{ int siz,n; vector>> V; vector> F,C; MergeSortTree2(vector> All){ n = All.size(),siz = 1; while(siz < n) siz += siz; V.resize(siz+siz),F.resize(siz+siz),C.resize(siz+siz); for(int i=0; i0; i--){ int pos1 = 0,pos2 = 0; int s1 = V.at(i*2).size(),s2 = V.at(i*2+1).size(); auto &v = V.at(i),&V1 = V.at(i*2),&V2 = V.at(i*2+1); v.resize(s1+s2); int pos = 0; while(pos1 < s1 && pos2 < s2){ if(V1.at(pos1).first <= V2.at(pos2).first) v.at(pos++) = V1.at(pos1++); else v.at(pos++) = V2.at(pos2++); } while(pos1 < s1) v.at(pos++) = V1.at(pos1++); while(pos2 < s2) v.at(pos++) = V2.at(pos2++); } for(int i=0; i 0){ int p = lower_bound(V.at(pos).begin(),V.at(pos).end(),now)-V.at(pos).begin(); F.at(pos).add(p,c*now.second),C.at(pos).add(p,c),pos >>= 1; } } long long query(int l,int r,int k){ int pos = 1; long long ret = 0; while(pos < siz){ auto &v = V.at(pos*2); int posl = lower_bound(v.begin(),v.end(),pair{l,-1LL})-v.begin(); int posr = lower_bound(v.begin(),v.end(),pair{r,-1LL})-v.begin(); long long c = C.at(pos*2).rangeans(posl,posr); if(c >= k){pos = pos*2; continue;} ret += F.at(pos*2).rangeans(posl,posr); k -= c,pos = pos*2+1; } ret += V.at(pos).at(0).second*k; return ret; } }; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int N,Q; cin >> N >> Q; vector> A(N); for(int i=0; i> s; A.at(i) = {s,i}; } sort(A.begin(),A.end()); MergeSortTree2 Z(A); for(int i=0; i> l >> r >> k,l--; cout << Z.query(l,r,k) << "\n"; } }