#include using namespace std; priority_queue lin,lout; priority_queue,greater> rin,rout; long long ls,rs; //l==rかl==r+1 void balance(){ while(lin.size()-lout.size()rin.size()-rout.size()+1){ //lからrへ while(lin.size()&&lout.size()&&lin.top()==lout.top()){ lin.pop(); lout.pop(); } int temp=lin.top();lin.pop(); ls-=temp; rin.push(temp); rs+=temp; } } void push(int v){ if(lin.size()==0||v<=lin.top()){ lin.push(v); ls+=v; }else{ rin.push(v); rs+=v; } balance(); } void pop(int v){ if(v<=lin.top()){ lout.push(v); ls-=v; }else{ rout.push(v); rs-=v; } balance(); } long long query(){ long long x=lin.top(); int lcnt=lin.size()-lout.size(); int rcnt=rin.size()-rout.size(); return (x*lcnt-ls)+(rs-x*rcnt); } void del(){ priority_queue lin2,lout2; priority_queue,greater> rin2,rout2; lin=lin2;lout=lout2; rin=rin2;rout=rout2; ls=0;rs=0; } const int len=500; int cmp(const tuplep, const tupleq){ if(get<0>(p)/len < get<0>(q)/len)return true; if(get<0>(p)/len > get<0>(q)/len)return false; if(get<1>(p) < get<1>(q))return true; if(get<1>(p) > get<1>(q))return false; return false; } int main(){ int n, q; cin >> n >> q; vectora(n); for(auto& e:a)cin >> e; vector>b(q); for(int i=0;i> l >> r; b[i]=make_tuple(l-1,r,i); } sort(b.begin(), b.end(), cmp); vectorans(q); int l=0,r=0,val=-1; for(int ii=0;iinl)push(a[--l]); ans[i]=query(); } for(auto v:ans)cout<< v<