码迷,mamicode.com
首页 > 其他好文 > 详细

luogu 3948 数据结构

时间:2019-08-26 22:51:45      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:algo   lse   dig   div   lag   pre   mes   ble   main   

题目

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 数据结构

标签:algo   lse   dig   div   lag   pre   mes   ble   main   

原文地址:https://www.cnblogs.com/Mandy-H-Y/p/11415330.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!