#define rep(i,n) for(int i=0;i<(int)(n);i++) #define ALL(v) v.begin(),v.end() typedef long long ll; #include using namespace std; struct mergesorttree{ int n; vector> a; //ソート列 vector> s; //累積和 mergesorttree(int m){ n=1; while(n(1)); } void set(int i,ll x){ a[n+i].push_back(x); s[n+i].push_back(x); } void init(){ for(int i=n-1;i>=1;i--){ int l=i<<1,r=l|1; merge(ALL(a[l]),ALL(a[r]),back_inserter(a[i])); s[i]=vector(a[i].size()+1); rep(j,a[i].size()) s[i][j+1]=s[i][j]+a[i][j]; } } pair get(int i,ll x){ auto l=lower_bound(ALL(a[i]),x)-a[i].begin(); int sz=s[i].size(); return {s[i][sz-1]-s[i][l],sz-1-l}; } ll solve(int l,int r,ll x){ l+=n,r+=n; ll sum=0,cnt=0; while(l>=1,r>>=1; } return sum-cnt*x; } }; int main(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); int n,q; cin>>n>>q; vector A(n); rep(i,n) cin>>A[i]; mergesorttree t(n); rep(i,n) t.set(i,A[i]); t.init(); while(q--){ ll c,l,r,x; cin>>c>>l>>r>>x; l--; cout<