zoukankan      html  css  js  c++  java
  • WHYZOJ-#50 树状数组2(树状数组)

    【题目描述】:

    如题,已知一个数列(下标从1开始计数),你需要进行下面两种操作:

    1.将某区间每一个数,加上x

    2.获取某一个数的值

    【输入描述】:

    第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。

    第二行包含N个用空格分隔的整数,第i个数字表示数列第i项的初始值。

    接下来M行每行包含2或4个整数,表示一个操作,具体如下:

    操作1: 格式:1 x y k 含义:将区间[x,y]内每个数加上k

    操作2: 格式:2 x 含义:输出第x个数的值

    【输出描述】:

    输出包含若干行整数,即为所有操作2的结果。

    【样例输入】:

    5 5
    1 5 4 2 3
    1 2 4 2
    2 3
    1 1 5 -1
    1 3 5 7
    2 4

    【样例输出】:

    6
    10

    【时间限制、数据范围及描述】:

    时间:1s 空间:128M

    对于30%的数据:N<=8,M<=10

    对于70%的数据:N<=10000,M<=10000

    对于100%的数据:N<=100000,M<=100000

    树状数组 区间修改 单点查询

     1 #include "bits/stdc++.h"
     2 using namespace std;
     3 typedef long long LL;
     4 const int MAX=100005;
     5 int n,m;
     6 int a[MAX],sum[MAX];
     7 void add(int x,int y){for (;x<MAX;x+=(x&-x)) sum[x]+=y;}
     8 int search(int x){int an=0;for (;x>0;x-=(x&-x)) an+=sum[x];return an;}
     9 int main(){
    10     int i,j,w,x,y,z;
    11     scanf("%d%d",&n,&m);
    12     memset(sum,0,sizeof(sum));
    13     for (i=1;i<=n;i++)
    14         scanf("%d",a+i);
    15     for (i=1;i<=m;i++){
    16         scanf("%d",&w);
    17         if (w==1){
    18             scanf("%d%d%d",&x,&y,&z);
    19             add(x,z),add(y+1,-z);
    20         }
    21         if (w==2){
    22             scanf("%d",&x);
    23             printf("%d
    ",a[x]+search(x));
    24         }
    25     }
    26     return 0;
    27 }
    未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
  • 相关阅读:
    PAT (Advanced Level) 1060. Are They Equal (25)
    PAT (Advanced Level) 1059. Prime Factors (25)
    PAT (Advanced Level) 1058. A+B in Hogwarts (20)
    PAT (Advanced Level) 1057. Stack (30)
    PAT (Advanced Level) 1056. Mice and Rice (25)
    PAT (Advanced Level) 1055. The World's Richest (25)
    PAT (Advanced Level) 1054. The Dominant Color (20)
    PAT (Advanced Level) 1053. Path of Equal Weight (30)
    PAT (Advanced Level) 1052. Linked List Sorting (25)
    PAT (Advanced Level) 1051. Pop Sequence (25)
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/7324757.html
Copyright © 2011-2022 走看看