• 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('
    ');
    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('
    ');
    90     }
    91 }
    92 
    93 int main(){
    94 //    file();
    95     readdata();
    96     work();
    97     return 0;
    98 }
    View Code
    非做顽石不可,哪管他敬仰暗唾
  • 相关阅读:
    HtmlEncode 和 HtmlDecode
    Visual Studio .Net 的一些小技巧(2)
    Array和ArrayList的区别
    c#中 ?? 是什么意思?
    带有图片预览功能的上传表单 上传预览
    Js实现Repeater全选/反选 功能 终极解决方案
    处理URL重写后postback重写失效的问题 .browser文件
    在TreeView中使用CheckBox(c#)
    SQL操作全集
    智能仓库管理系统方案(一)
  • 原文地址:https://www.cnblogs.com/Mandy-H-Y/p/11415330.html
Copyright © 2020-2023  润新知