#include <bits/stdc++.h>
using namespace std;
const int MX=500500,md=1000000007;
int n,q,l,r,a[MX],b[MX],nxt[MX];
pair<long long, long long> f[MX][20];
long long x,sa[MX];
int main() {
scanf("%d%d",&n,&q);
for (int i=1; i<=n; i++) {
scanf("%d%d",&a[i],&b[i]);
sa[i]=sa[i-1]+a[i];
f[i][0]=(b[i]>1)?make_pair(b[i],0):make_pair(1,a[i]);
}
for (int j=1; j<20; j++) for (int i=1; i<=n; i++) {
f[i][j]=f[i][j-1];
int k=i+(1<<(j-1));
if (k<=n) {
f[i][j].first=(f[i][j].first*f[k][j-1].first)%md;
f[i][j].second=(f[i][j].second*f[k][j-1].first+f[k][j-1].second)%md;
}
}
nxt[n+1]=n+1;
for (int i=n; i>0; i--) nxt[i]=(b[i]>1)?i:nxt[i+1];
while (q--) {
scanf("%lld%d%d",&x,&l,&r);
while (l<r) {
int pos=nxt[l+1];
if (pos>r) {
x+=sa[r]-sa[l];
l=r;
break;
}
x+=sa[pos-1]-sa[l];
x=max(x+a[pos],x*b[pos]);
l=pos;
if (x>=md) break;
}
x%=md;
for (int j=19; j>=0; j--) if (l+(1<<j)<=r) {
x=(x*f[l+1][j].first+f[l+1][j].second)%md;
l+=(1<<j);
}
printf("%lld\n",x);
}
return 0;
}
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 | #include <bits/stdc++.h> using namespace std; const int MX=500500,md=1000000007; int n,q,l,r,a[MX],b[MX],nxt[MX]; pair<long long, long long> f[MX][20]; long long x,sa[MX]; int main() { scanf("%d%d",&n,&q); for (int i=1; i<=n; i++) { scanf("%d%d",&a[i],&b[i]); sa[i]=sa[i-1]+a[i]; f[i][0]=(b[i]>1)?make_pair(b[i],0):make_pair(1,a[i]); } for (int j=1; j<20; j++) for (int i=1; i<=n; i++) { f[i][j]=f[i][j-1]; int k=i+(1<<(j-1)); if (k<=n) { f[i][j].first=(f[i][j].first*f[k][j-1].first)%md; f[i][j].second=(f[i][j].second*f[k][j-1].first+f[k][j-1].second)%md; } } nxt[n+1]=n+1; for (int i=n; i>0; i--) nxt[i]=(b[i]>1)?i:nxt[i+1]; while (q--) { scanf("%lld%d%d",&x,&l,&r); while (l<r) { int pos=nxt[l+1]; if (pos>r) { x+=sa[r]-sa[l]; l=r; break; } x+=sa[pos-1]-sa[l]; x=max(x+a[pos],x*b[pos]); l=pos; if (x>=md) break; } x%=md; for (int j=19; j>=0; j--) if (l+(1<<j)<=r) { x=(x*f[l+1][j].first+f[l+1][j].second)%md; l+=(1<<j); } printf("%lld\n",x); } return 0; } |
English