luogu 3948 数据结构

Posted mandy-h-y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu 3948 数据结构相关的知识,希望对你有一定的参考价值。

题目

luogu3948

 

 

技术图片

技术图片

输入输出样例

输入 #1
3 2 4 0 2
A 1 3 5
Q 2 3 
5
1 3
2 3
1 1 
2 2 
3 3
输出 #1
1
2
1
1
1
0
输入 #2
17 25 4098 310 2622
A 10 16 657212040
A 4 15 229489140
A 1 2 -433239891
A 3 12 532385784
A 10 17 56266644
A 8 10 10038874
A 6 9 13084764
A 4 5 -9206340
Q 2 8
A 2 4 -43223955
A 6 9 31478706
A 2 4 189818310
A 2 8 179421180
A 2 8 40354938
Q 8 14
A 3 6 57229575
A 6 13 132795740
A 2 17 14558022
A 14 15 -552674185
A 5 11 -1104138
Q 2 12
Q 1 14
A 3 9 524902182
A 8 12 114291440
A 3 7 107531442
1
11 12
输出 #2
3
6
7
8
2
输入 #3
20 3 4317 1020 2232
A 8 15 -434078222
A 1 2 54988154
A 13 19 81757858
15
7 11
3 5
3 9
6 9
9 13
6 19
1 20
3 5
3 10
1 7
2 14
6 10
2 3
2 3
10 12
输出 #3
0
0
0
0
0
2
2
0
0
0
0
0
0
0
0

技术图片
技术图片
技术图片

分析

这道题呢,如果你真想用线段树 or 树状数组硬刚,其实也是刚得出来的

但是,不要忘了,区间修改还有一种方法:差分数组

别急,我们先看看数据范围:opt中的Q<=1000,说明,暴力的询问是可以的,前缀和就好

关于final?不要忘了可以离线,因为没有修改

delta与sum数组都不要取模
取了的话负数的模值会受影响

代码

技术图片
 1 /**********************
 2 User:Mandy.H.Y
 3 Language:c++
 4 Problem:luogu3948
 5 Problem:
 6 Algorithm:
 7 **********************/
 8 
 9 #include<bits/stdc++.h>
10 
11 //delta与sum数组都不要取模
12 //取了的话负数的模值会受影响 
13 
14 using namespace std;
15 
16 const int maxn = 8e4 + 5;
17 const int maxm = 1e6 + 5;
18 const int maxf = 1e7 + 5;
19 
20 long long n,mod,mi,ma,opt;
21 long long delta[maxn],sum[maxn];
22 long long cnt[maxn];
23 
24 template<class T>inline void read(T &x)
25     x = 0;bool flag = 0;char ch = getchar();
26     while(!isdigit(ch)) flag |= ch == -,ch = getchar();
27     while(isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48),ch = getchar();
28     if(flag) x = -x;
29 
30 
31 template<class T>void putch(const T x)
32     if(x > 9) putch(x / 10);
33     putchar(x % 10 | 48); 
34 
35 
36 template<class T>void put(const T x)
37     if(x < 0) putchar(-),putch(-x);
38     else putch(x);
39 
40 
41 void file()
42     freopen("3948.in","r",stdin);
43 //    freopen("3948.out","w",stdout);
44 
45 
46 void readdata()
47     read(n);read(opt);
48     read(mod);read(mi);read(ma);
49 
50 
51 
52 void work()
53     while(opt --)
54         char c = getchar();
55         long long l,r,x;
56         while(c != A && c != Q) c = getchar();
57         if(c == A)
58             read(l);read(r);read(x);
59             delta[l] += x;
60             delta[r + 1] -= x;
61         
62         else if(c == Q)
63             int num = 0;sum[0]=0;
64             read(l);read(r);
65             for(long long i = 1;i <= r; ++ i)
66                 sum[i] = sum[i-1] + delta[i];
67                 if(i >= l)
68                     x = sum[i] * i % mod;
69                     if(mi <= x && x <= ma) ++num ;
70                 
71             
72             put(num);
73             putchar(\\n);
74         
75     
76     int final;
77     read(final);
78     for(int i = 1;i <= n; ++ i)
79         cnt[i] = cnt[i-1];
80         sum[i] = sum[i-1] + delta[i];
81         long long x = sum[i] * i % mod;
82         if(mi <= x && x <= ma) ++cnt[i];
83     
84     
85     while(final--)
86         int l,r;
87         read(l);read(r);
88         put(cnt[r] - cnt[l-1]);
89         putchar(\\n);
90     
91 
92 
93 int main()
94 //    file();
95     readdata();
96     work();
97     return 0;
98 
View Code

 

以上是关于luogu 3948 数据结构的主要内容,如果未能解决你的问题,请参考以下文章

hdu 3948 The Number of Palindromes

HDU - 3948 后缀数组+Manacher

HDOJ3948 The Number of Palindromes

ZOJ 3948: Marjar Cola

hdu3948-不同回文串的个数后缀数组

我用Python爬取了B站3948评论,围观最近超火的“杀疯了!这就是国家队的美貌吗?”评论区