加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

洛谷 ~ P3948 ~ 数据结构 (差分数组)

发布时间:2020-12-15 04:58:13 所属栏目:百科 来源:网络整理
导读:思路 直接差分数组搞一搞就OK了。因为前面的查询和修改掺杂在一起的询问很少,所以对于那些询问我们暴力去查询就OK。在final询问之前求一个符合要求的前缀和就可以O(1)输出了。 #include using namespace std; const int MAXN = 8e4 + 5; typedef long long

思路

直接差分数组搞一搞就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

*/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读