洛谷 ~ P3948 ~ 数据结构 (差分数组)
思路直接差分数组搞一搞就OK了。因为前面的查询和修改掺杂在一起的询问很少,所以对于那些询问我们暴力去查询就OK。在final询问之前求一个符合要求的前缀和就可以O(1)输出了。 #include using namespace std; const int MAXN = 8e4 + 5; typedef long long LL; int n,opt,MOD,MIN,MAX,Final,sum[MAXN]; LL diff[MAXN]; int main() { scanf("%d%d%d%d%d",&n,&opt,&MOD,&MIN,&MAX); while (opt--) { char c[10]; scanf("%s",c); int L,R,X; if (c[0] == 'A') { scanf("%d%d%d",&L,&R,&X); diff[L] += X; diff[R + 1] -= X; } if (c[0] == 'Q') { scanf("%d%d",&R); LL now = 0; int ans = 0; for (int i = 1; i <= R; i++) { now += diff[i]; if (i >= L && MIN <= now * i % MOD && now * i % MOD <= MAX) ans++; } printf("%dn",ans); } } LL now = 0; for (int i = 1; i <= n; i++) { now += diff[i]; sum[i] += sum[i - 1]; if (MIN <= now * i % MOD && now * i % MOD <= MAX) sum[i]++; } scanf("%d",&Final); while (Final--) { int L,R; scanf("%d%d",&R); printf("%dn",sum[R] - sum[L - 1]); } return 0; } /* 3 2 4 0 2 A 1 3 5 Q 2 3 5 1 3 2 3 1 1 2 2 3 3 */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |