1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| #include<bits/stdc++.h> #define ll long long #define N 200010 #define mo 19260817 #define md(a) (((a)%mo+mo)%mo) #define mem(a,b) memset(a,b,sizeof(a)) #define fsb(a,b,c) for(ll a=b;a<=(c);a++) #define fbs(a,b,c) for(ll a=b;a>=(c);a--) using namespace std; ll n,m,po[N],a[N],lcnt[N],rcnt[N],lcost[N],rcost[N],x,l,r; template<typename qw>inline void rll(qw &x){ x=0;qw f=1;char c=getchar(); while(!isdigit(c))f=c=='-'?-1:f,c=getchar(); while(isdigit(c))x=x*10+c-'0',c=getchar(); x*=f; } int main(){
rll(n);rll(m);po[1]=0; fsb(i,2,n){ rll(po[i]);po[i]+=po[i-1];po[i]=md(po[i]); } mem(a,0);fsb(i,1,n)rll(a[i]); mem(lcnt,0);mem(rcnt,0); fsb(i,1,n){ lcnt[i]=lcnt[i-1]+a[i-1];lcnt[i]=md(lcnt[i]); } fbs(i,n,1){ rcnt[i]=rcnt[i+1]+a[i+1];rcnt[i]=md(rcnt[i]); } mem(lcost,0);mem(rcost,0); fsb(i,2,n){ lcost[i]=md(lcost[i-1]+lcnt[i]*(po[i]-po[i-1])); }
fbs(i,n-1,1){ rcost[i]=md(rcost[i+1]+rcnt[i]*(po[i+1]-po[i])); } fsb(i,1,m){ rll(x);rll(l);rll(r); l=l==x?l+1:l; r=r==x?r-1:r; if(l>r){ puts("0");continue; } ll ans=0; if(r<x){ ans=md(lcnt[r+1]*(po[x]-po[r])+lcost[r]-lcost[l]-lcnt[l]*(po[x]-po[l])); } if(l>x){ ans=md(rcnt[l-1]*(po[l]-po[x])+rcost[l]-rcost[r]-rcnt[r]*(po[r]-po[x])); } if(l<x&&r>x){ ans=md(lcnt[x]*(po[x]-po[x-1])+lcost[x-1]-lcost[l]-lcnt[l]*(po[x]-po[l])); ans+=md(rcnt[x]*(po[x+1]-po[x])+rcost[x+1]-rcost[r]-rcnt[r]*(po[r]-po[x])); ans=md(ans); } printf("%lld\n",ans); } return 0; }
|