zoukankan      html  css  js  c++  java
  • 洛谷P3374(线段树)(询问区间和,支持单点修改)

    洛谷P3374

     1 //询问区间和,支持单点修改
     2 #include <cstdio>
     3 
     4 using namespace std;
     5 
     6 const int maxn=500050;
     7 
     8 struct treetype
     9 {
    10     int l,r,sum;
    11 };
    12 
    13 treetype a[4*maxn];
    14 int num[maxn];
    15 
    16 void build(int k,int l,int r)
    17 {
    18     a[k].l=l;a[k].r=r;
    19     if (l==r)
    20     {
    21         a[k].sum=num[l];
    22         return;
    23     }
    24     int mid=(l+r)>>1,i=k<<1;
    25     build(i,l,mid);
    26     build(i+1,mid+1,r);
    27     a[k].sum=a[i].sum+a[i+1].sum;
    28 }
    29 void change(int k,int x,int t)
    30 {
    31     if (a[k].l==a[k].r)
    32     {
    33         a[k].sum+=t;
    34         return;
    35     }
    36     int mid=(a[k].l+a[k].r)>>1,i=k<<1;
    37     if (x<=mid) change(i,x,t);
    38     else change(i+1,x,t);
    39     a[k].sum=a[i].sum+a[i+1].sum;
    40 }
    41 int query(int k,int x,int y)
    42 {
    43     if (x<=a[k].l && a[k].r<=y) return a[k].sum;
    44     int mid=(a[k].l+a[k].r)>>1,ans=0,i=k<<1;
    45     if (x<=mid) ans=query(i,x,y);
    46     if (mid<y) ans+=query(i+1,x,y);
    47     return ans;
    48 }
    49 
    50 int main()
    51 {
    52     int n,m;
    53     scanf("%d%d",&n,&m);
    54     for (int i=1;i<=n;i++) scanf("%d",&num[i]);
    55     build(1,1,n);
    56     //for (int i=1;i<=n*2;i++) printf("%d %d %d %d
    ",i,a[i].l,a[i].r,a[i].sum);
    57     for (int i=1;i<=m;i++)
    58     {
    59         int t,x,y;
    60         scanf("%d%d%d",&t,&x,&y);
    61         if (t==1) change(1,x,y);
    62         else printf("%d
    ",query(1,x,y));
    63     }
    64     return 0;
    65 }
  • 相关阅读:
    点击图片等比缩放
    C# 使用 NPOI 库读写 Excel 文件
    vue url生产二维码
    centos Linux 同步Windows 时间
    centos 搭建 docker sentry
    centos 安装 pip
    webpack 提升90%的构建速度 HardSourceWebpackPlugin
    webpack 原生分析
    webpack 分析
    nodejs——js 实现webSocket 兼容移动端
  • 原文地址:https://www.cnblogs.com/Currier/p/11269962.html
Copyright © 2011-2022 走看看