zoukankan      html  css  js  c++  java
  • POJ 3468 A Simple Problem with Integers

    A Simple Problem with Integers
    Time Limit: 5000MS   Memory Limit: 131072K
    Total Submissions: 92522   Accepted: 28778
    Case Time Limit: 2000MS

    Description

    You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is to ask for the sum of numbers in a given interval.

    Input

    The first line contains two numbers N and Q. 1 ≤ N,Q ≤ 100000.
    The second line contains N numbers, the initial values of A1, A2, ... , AN. -1000000000 ≤ Ai ≤ 1000000000.
    Each of the next Q lines represents an operation.
    "C a b c" means adding c to each of Aa, Aa+1, ... , Ab. -10000 ≤ c ≤ 10000.
    "Q a b" means querying the sum of Aa, Aa+1, ... , Ab.

    Output

    You need to answer all Q commands in order. One answer in a line.

    Sample Input

    10 5
    1 2 3 4 5 6 7 8 9 10
    Q 4 4
    Q 1 10
    Q 2 4
    C 3 6 3
    Q 2 4
    

    Sample Output

    4
    55
    9
    15

    Hint

    The sums may exceed the range of 32-bit integers.

    Source

     
     
     
    解析:线段树,区间更新,区间查询。
     
     
     
     1 #include <cstdio>
     2 
     3 struct Node{
     4     int l, r;
     5     long long val, add;
     6 };
     7 Node node[100005<<2];
     8 
     9 void build(int v, int l, int r)
    10 {
    11     node[v].l = l;
    12     node[v].r = r;
    13     node[v].add = 0;
    14     if(node[v].l == node[v].r){
    15         scanf("%I64d", &node[v].val);
    16         return;
    17     }
    18     int mid = (l+r)>>1;
    19     build(v<<1, l, mid);
    20     build(v<<1|1, mid+1, r);
    21     node[v].val = node[v<<1].val+node[v<<1|1].val;
    22 }
    23 
    24 void pushDown(int v)
    25 {
    26     if(node[v].add){
    27         node[v<<1].add += node[v].add;
    28         node[v<<1|1].add += node[v].add;
    29         int m = node[v].r-node[v].l+1;
    30         node[v<<1].val += (m-(m>>1))*node[v].add;
    31         node[v<<1|1].val += (m>>1)*node[v].add;
    32         node[v].add = 0;
    33     }
    34 }
    35 
    36 long long query(int v, int l, int r)
    37 {
    38     if(node[v].l == l && node[v].r == r)
    39         return node[v].val;
    40     pushDown(v);    //更新子区间
    41     int mid = (node[v].l+node[v].r)>>1;
    42     if(r <= mid)
    43         return query(v<<1, l, r);
    44     else if(l > mid)
    45         return query(v<<1|1, l, r);
    46     else
    47         return query(v<<1, l, mid)+query(v<<1|1, mid+1, r);
    48 }
    49 
    50 void update(int v, int l, int r, int c)
    51 {
    52     if(node[v].l == l && node[v].r == r){
    53         node[v].val += (r-l+1)*c;
    54         node[v].add += c;
    55         return;
    56     }
    57     pushDown(v);    //更新子区间
    58     int mid = (node[v].l+node[v].r)>>1;
    59     if(r <= mid)
    60         update(v<<1, l, r, c);
    61     else if(l > mid)
    62         update(v<<1|1, l, r, c);
    63     else{
    64         update(v<<1, l, mid, c);
    65         update(v<<1|1, mid+1, r, c);
    66     }
    67     node[v].val = node[v<<1].val+node[v<<1|1].val;
    68 }
    69 
    70 int main()
    71 {
    72     int N, Q;
    73     scanf("%d%d", &N, &Q);
    74     build(1, 1, N);
    75     char order[5];
    76     int a, b, c;
    77     while(Q--){
    78         scanf("%s", order);
    79         if(order[0] == 'Q'){
    80             scanf("%d%d", &a, &b);
    81             printf("%I64d
    ", query(1, a, b));
    82         }
    83         else{
    84             scanf("%d%d%d", &a, &b, &c);
    85             update(1, a, b, c);
    86         }
    87     }
    88     return 0;
    89 }
  • 相关阅读:
    陶瓷电容的结构、工艺、失效模式
    Vue.js最佳实践
    Vue 超快速学习
    CSS 小技巧
    HTML5 Canvas
    webkit下面的CSS设置滚动条
    Some untracked working tree files would be overwritten by checkout. Please move or remove them before you can checkout. View them
    JSCS: Please specify path to 'JSCS' package
    React中ref的使用方法
    React 60S倒计时
  • 原文地址:https://www.cnblogs.com/inmoonlight/p/5674834.html
Copyright © 2011-2022 走看看