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 }

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

  • 相关阅读:
    【计算机组成原理】00-开篇词
    【设计模式】05-面向对象四大特性能解决什么问题
    【设计模式】04-面向对象谈了啥
    【设计模式】03-面向对象、设计原则、设计模式、编程规范、重构的关系
    模拟银行业务调度系统逻辑
    模拟交通灯管理系统逻辑设计
    JDK1.5新特性(七)……Annotations
    代理与动态代理
    类加载器
    JDK1.5新特性(六)……Generics
  • 原文地址:https://www.cnblogs.com/handsome-zyc/p/11488666.html
Copyright © 2011-2022 走看看