• 结点更新+区间统计——hdu1166


    在单纯的更新结点时,是不需要用到遗传结构的

    在区间的更新时,会用到遗传结构

    View Code
    #include<stdio.h>
    #include
    <string.h>

    struct data
    {
    int l,r,val;
    }st[
    200009];

    void build(int ll,int rr,int n)
    {
    st[n].l
    =ll;
    st[n].r
    =rr;
    st[n].val
    =0;
    if (ll==rr) return ;
    int mid=(ll+rr)/2;
    build(ll,mid,
    2*n);
    build(mid
    +1,rr,2*n+1);
    }
    void updata(int ll,int rr,int a,int n,char c)//
    {
    if (st[n].l==ll&&st[n].r==rr)
    {
    if(c=='+')
    st[n].val
    +=a;
    else
    st[n].val
    -=a;
    return ;
    }

    if(c=='+')
    st[n].val
    +=a;
    else
    st[n].val
    -=a;

    int mid=(st[n].l+st[n].r)/2;
    if (rr<=mid)
    {
    updata(ll,rr,a,
    2*n,c);
    }
    else if (ll>=mid+1) updata(ll,rr,a,2*n+1,c);
    else
    {
    updata(ll,mid,a,
    2*n,c);
    updata(mid
    +1,rr,a,2*n+1,c);
    }

    }

    int search(int ll,int rr,int n)
    {
    if(st[n].l==ll&&st[n].r==rr)return st[n].val;

    int mid=(st[n].l+st[n].r)/2;
    if (rr<=mid) return search(ll,rr,2*n);
    else if (ll>=mid+1)return search(ll,rr,2*n+1);
    else
    {
    return search(ll,mid,2*n)+search(mid+1,rr,2*n+1);
    }
    }

    int main()
    {
    int t;
    scanf(
    "%d",&t);
    int cc=1;
    while(t--)
    {

    printf(
    "Case %d:\n",cc);
    cc
    ++;
    int n;
    scanf(
    "%d",&n);
    int i;
    build(
    1,n,1);
    for(i=1;i<=n;i++)
    {
    int temp;
    scanf(
    "%d",&temp);
    updata(i,i,temp,
    1,'+');
    }
    getchar();
    char ss[10];
    while(1)
    {
    scanf(
    "%s",ss);
    getchar();
    if(strcmp(ss,"Query")==0)
    {
    int ll,rr;
    scanf(
    "%d%d",&ll,&rr);
    printf(
    "%d\n",search(ll,rr,1));
    }
    else if(strcmp(ss,"Add")==0)
    {
    int no,addv;
    scanf(
    "%d%d",&no,&addv);
    updata(no,no,addv,
    1,'+');
    }
    else if(strcmp(ss,"Sub")==0)
    {
    int no,addv;
    scanf(
    "%d%d",&no,&addv);
    updata(no,no,addv,
    1,'-');
    }
    else
    {
    break;
    }
    }
    }
    return 0;
    }
  • 相关阅读:
    使用原生JS封装一个动画函数
    在Vue 中调用数据出现属性不存在的问题
    vs code 如何修改默认主题的注释颜色
    HTML5新标签的兼容性处理
    如何在Vue中使用Mockjs模拟数据的增删查改
    call、apply和bind的用法
    JS原型继承的几种方式
    JavaScript基础部分经典案例
    运算符与基本数据类型
    python安装与初始
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2104475.html
Copyright © 2020-2023  润新知