zoukankan      html  css  js  c++  java
  • P3368 【模板】树状数组 2

    题面

    呐,又是一道树状数组模板题,区间修改+单点查询,稍微难了一点,用树状数组维护原数组的差分数组,输出i时即为原数组下标为i的值加上差分数组下标为i的前缀和

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 using namespace std;
     6 const int N=500005;
     7 
     8 int n,m;
     9 int a[N],u[N];
    10 
    11 int lowbit(int l){return l&(-l);}//求前后子树的根节点
    12 
    13 int sum(int k){//前缀求和
    14     int an=0;
    15     for(;k;k-=lowbit(k)){
    16         an+=a[k];
    17     }
    18     return an;
    19 }
    20 
    21 int main(){
    22     scanf("%d%d",&n,&m);
    23     for(int i=1;i<=n;i++){
    24         scanf("%d",&u[i]);
    25     }
    26     for(int i=1;i<=m;i++){
    27         int p;
    28         scanf("%d",&p);
    29         if(p==1){//差分数组的思想
    30             int k,l,r;
    31             scanf("%d%d%d",&l,&r,&k);
    32             for(;l<=n;l+=lowbit(l)){
    33                 a[l]+=k;
    34             }
    35             r++;
    36             for(;r<=n;r+=lowbit(r)){
    37                 a[r]-=k;
    38             }
    39         }
    40         else{
    41             int k;
    42             scanf("%d",&k);
    43             printf("%d
    ",u[k]+sum(k));//如开头所说
    44         }
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    maven常用插件
    Java反编译工具:Java Decompiler
    好看的电影
    我说
    Fisher准则一维聚类
    Java获取函数参数名称
    推荐几个字体生成网站
    Python中的两种路径
    轻量级数据库简介
    Solr Wiki文档
  • 原文地址:https://www.cnblogs.com/hahaha2124652975/p/11200055.html
Copyright © 2011-2022 走看看