zoukankan      html  css  js  c++  java
  • 洛谷 P3374 【模板】树状数组 1 & P3368 【模板】树状数组 2 题解

    一维树状数组的作用主要是单点修改,单点查询,区间修改,区间查询。

    模板1是单点修改,区间查询;模板2是单点查询,区间修改。

    模板1:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #define maxn 500000+10
     6 using namespace std;
     7 inline int read() 
     8 {
     9     int x=0;
    10     bool f=1;
    11     char c=getchar();
    12     for(; !isdigit(c); c=getchar()) if(c=='-') f=0;
    13     for(; isdigit(c); c=getchar()) x=(x<<3)+(x<<1)+c-'0';
    14     if(f) return x;
    15     return 0-x;
    16 }
    17 inline void write(int x)
    18 {
    19     if(x<0){putchar('-');x=-x;}
    20     if(x>9)write(x/10);
    21     putchar(x%10+'0');
    22 }
    23 int n,m;
    24 int tree[maxn];
    25 inline int lowbit(int num)
    26 {
    27     return num&-num;
    28 }
    29 inline void build(int s,int num)
    30 {
    31     for(int i=s;i<=n;i+=lowbit(i)) tree[i]+=num;
    32 }
    33 inline int ask(int s)
    34 {
    35     int ans=0;
    36     for(int i=s;i>=1;i-=lowbit(i)) ans+=tree[i];
    37     return ans;
    38 }
    39 int main()
    40 {
    41     n=read();m=read();
    42     for(int i=1;i<=n;i++) 
    43     {
    44         int x;
    45         x=read();
    46         build(i,x);
    47     }
    48     for(int i=1;i<=m;i++)
    49     {
    50         int se;
    51         se=read();
    52         if(se==1)
    53         {
    54             int x,k;
    55             x=read();k=read();
    56             build(x,k);
    57         }
    58         else if(se==2)
    59         {
    60             int  x,y;
    61             x=read();y=read();
    62             write(ask(y)-ask(x-1));
    63             printf("
    ");
    64         }
    65     }
    66     return 0;
    67 }

    模板2:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #define maxn 500000+10
     6 #define INF 2147483647/2-1
     7 using namespace std;
     8 inline int read() 
     9 {
    10     int x=0;
    11     bool f=1;
    12     char c=getchar();
    13     for(; !isdigit(c); c=getchar()) if(c=='-') f=0;
    14     for(; isdigit(c); c=getchar()) x=(x<<3)+(x<<1)+c-'0';
    15     if(f) return x;
    16     return 0-x;
    17 }
    18 inline void write(int x)
    19 {
    20     if(x<0){putchar('-');x=-x;}
    21     if(x>9)write(x/10);
    22     putchar(x%10+'0');
    23 }
    24 int n,m;
    25 int tree[maxn],inn[maxn];
    26 inline int lowbit(int num)
    27 {
    28     return num&-num;
    29 }
    30 inline void build(int s,int num)
    31 {
    32     for(int i=s;i<=n;i+=lowbit(i)) tree[i]+=num;
    33 }
    34 inline int ask(int s)
    35 {
    36     int ans=0;
    37     for(int i=s;i>=1;i-=lowbit(i)) ans+=tree[i];
    38     return ans;
    39 }
    40 int main()
    41 {
    42     n=read();m=read();
    43     for(int i=1;i<=n;i++) inn[i]=read();
    44     for(int i=1;i<=m;i++)
    45     {
    46         int se;
    47         se=read();
    48         if(se==1)
    49         {
    50             int x,y,k;
    51             x=read();y=read();k=read();
    52             build(x,k);build(y+1,-k);
    53         }
    54         else if(se==2)
    55         {
    56             int x;
    57             x=read();
    58             printf("%d
    ",inn[x]+ask(x));
    59         }
    60     }
    61     return 0;
    62 }

    请各位大佬斧正(反正我不认识斧正是什么意思)

  • 相关阅读:
    绝对定位和浮动的区别和运用
    xhtml css 漏 整理
    网站自适应设备屏幕
    CSS 媒体查询 响应式
    js/jquery判断浏览器 & 停止加载
    回调函数之同步调用、回调、异步调用
    Flash生成HTML5动画方法
    在html页面中使用js变量
    BZOJ 4417 Luogu P3990 [SHOI2013]超级跳马 (DP、矩阵乘法)
    NOI2019游记
  • 原文地址:https://www.cnblogs.com/handsome-zyc/p/11488666.html
Copyright © 2011-2022 走看看