RT,和题解拍不出来
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5,M=1e5+5,Q=1e3+5;
int n,q,a[M],sum2[M];
struct ask{int l,r,x,y,ans,id,m;}op[N];
vector<ask> query1[N];
vector<ask> query2[N];
int sum[Q][Q];
int big_sum[Q][Q];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
cin>>n>>q;
int maxq=0;
for(int i=1;i<=n;++i) cin>>a[i],maxq=max(maxq,a[i]);
int len=330,kuai=(Q-5+len-1)/len;
for(int i=1;i<=q;++i) {
op[i].id=i;
cin>>op[i].l>>op[i].r>>op[i].x>>op[i].y>>op[i].m;
if(op[i].x%op[i].m==op[i].y%op[i].m) {op[i].ans=0;}
else if(op[i].m<=len) {
query1[op[i].l-1].push_back(op[i]);
query1[op[i].r].push_back(op[i]);
}else {
//cout<<query2[op[i].l-1].size()<<'\n';
query2[op[i].l-1].push_back(op[i]);
query2[op[i].r].push_back(op[i]);
}
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=len;j++) sum[j][a[i]%j]++;
for(int j=0;j<query1[i].size();j++) {
ask x=query1[i][j];
if(i==op[x.id].l-1) {
if(x.x%x.m<x.y%x.m) {
int suml=0,sumr=0;
for(int k=0;k<=x.m-x.y%x.m-1;k++) suml+=sum[x.m][k];
for(int k=0;k<=x.m-x.x%x.m-1;k++) sumr+=sum[x.m][k];
op[x.id].ans-=(x.l-1)+suml-sumr;
}else {
int suml=0,sumr=0;
for(int k=0;k<=x.m-x.y%x.m-1;k++) suml+=sum[x.m][k];
for(int k=0;k<=x.m-x.x%x.m-1;k++) sumr+=sum[x.m][k];
op[x.id].ans-=suml-sumr;
}
// cout<<op[x.id].ans<<'\n';
}else {
if(x.x%x.m<x.y%x.m) {
int suml=0,sumr=0;
for(int k=0;k<=x.m-x.y%x.m-1;k++) suml+=sum[x.m][k];
for(int k=0;k<=x.m-x.x%x.m-1;k++) sumr+=sum[x.m][k];
op[x.id].ans+=(x.r)+suml-sumr;
}else {
int suml=0,sumr=0;
for(int k=0;k<=x.m-x.y%x.m-1;k++) suml+=sum[x.m][k];
for(int k=0;k<=x.m-x.x%x.m-1;k++) sumr+=sum[x.m][k];
op[x.id].ans+=suml-sumr;
}
// cout<<op[x.id].ans<<'\n';
}
}
}
for(int i=1;i<=n;i++) {
int val=a[i],belong=(a[i]+len-1)/len;
for(int k=a[i];k<=kuai*len;k++) sum2[k]++;
for(int k=belong;k<=kuai+1;k++) big_sum[k][len]++;
for(int k=(a[i]-1)%len;k<len;k++) big_sum[belong][k]++;
for(int j=0;j<query2[i].size();j++) {
ask x=query2[i][j];
//cout<<x.id<<'\n';
if(i==op[x.id].l-1) {
for(int l=0;l<=kuai*len;l+=x.m) {
int k=x.m-x.x%x.m-1+l;
int belong_k=(k+len-1)/len;
int suml=big_sum[belong_k-1][len]+big_sum[belong_k][(k-1)%len];
if(k>maxq) {suml=big_sum[kuai][len];}
op[x.id].ans+=suml;
}
for(int l=0;l<=kuai*len;l+=x.m) {
int k=x.m-x.y%x.m-1+l;
int belong_k=(k+len-1)/len;
int sumr=big_sum[belong_k-1][len]+big_sum[belong_k][(k-1)%len];
if(k>maxq) {sumr=big_sum[kuai][len];}
op[x.id].ans-=sumr;
}
if(x.x%x.m<x.y%x.m) op[x.id].ans-=x.l-1;
}else {
for(int l=0;l<=kuai*len;l+=x.m) {
int k=x.m-x.x%x.m-1+l;
int belong_k=(k+len-1)/len;
int suml=big_sum[belong_k-1][len]+big_sum[belong_k][(k-1)%len];
if(k>maxq) {suml=big_sum[kuai][len];}
op[x.id].ans-=suml;
}
for(int l=0;l<=kuai*len;l+=x.m) {
int k=x.m-x.y%x.m-1+l;
int belong_k=(k+len-1)/len;
int sumr=big_sum[belong_k-1][len]+big_sum[belong_k][(k-1)%len];
if(k>maxq) {sumr=big_sum[kuai][len];}
op[x.id].ans+=sumr;
}
if(x.x%x.m<x.y%x.m) op[x.id].ans+=i;
}
}
}
for(int i=1;i<=q;i++) {
// cout<<op[i].l<<' '<<op[i].r<<' '<<op[i].m<<'\n';
if(op[i].x%op[i].m==op[i].y%op[i].m) op[i].ans*=0;
cout<<op[i].ans<<'\n';
}
return 0;
}