线段树模板--单点更新+区间求和

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1166

代码:

普通线段树

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 int tree[250000];
 5 int m;
 6 void pushup(int rt)
 7 {
 8     tree[rt]=tree[rt<<1]+tree[rt<<1|1];
 9 }
10 void csh(int l,int r,int rt)
11 {
12     if(l==r)
13     {
14         scanf("%d",&tree[rt]);
15         return ;
16     }
17     else
18     {
19         int m=(l+r)>>1;
20         csh(l,m,rt<<1);
21         csh(m+1,r,rt<<1|1);
22         pushup(rt);
23     }
24 }
25 void update(int k,int c,int l,int r,int rt)
26 {
27     if(l==r)
28     {
29         tree[rt]+=c;
30         return  ;
31     }
32     int m=(l+r)>>1;
33     if(k<=m)
34         update(k,c,l,m,rt<<1);
35     else
36         update(k,c,m+1,r,rt<<1|1);
37     pushup(rt);
38 }
39 int query(int L,int R,int l,int r,int rt)
40 {
41     if(L <= l && r <= R)
42     {
43         return tree[rt];
44     }
45     int m=(l+r)>>1;
46     int ans=0;
47     if(L <= m)
48         ans+=query(L,R,l,m,rt<<1);
49     if(R > m)
50         ans+=query(L,R,m+1,r,rt<<1|1);
51     return ans;
52 }
53 int main()
54 {
55     int jishu;
56     cin>>jishu;
57     for(int kk=1; kk<=jishu; kk++)
58     {
59         int n;
60         scanf("%d",&n);
61         csh(1,n,1);
62         char ch[20];
63         printf("Case %d:\n",kk);
64        while(scanf("%s",ch))
65         {
66            if(ch[0]=='E')
67                break;
68             else
69             {
70                 int a,b;
71                 scanf("%d%d",&a,&b);
72                 if(ch[0]=='Q')
73                     cout<<query(a,b,1,n,1)<<endl;
74                 else
75                 {
76                     if(ch[0]=='A')
77                     {
78                         update(a,b,1,n,1);
79                     }
80                     else
81                         update(a,b*-1,1,n,1);
82                 }
83             }
84         }
85     }
86 }

 

zkw线段树

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 int tree[250000];
 5 int m;
 6 void csh(int n)
 7 {
 8     memset(tree,0,sizeof(tree));
 9     m=1;
10     while(m<=n)   m<<=1;
11     for(int i=m+1;i<=m+n;i++)   scanf("%d",&tree[i]);
12     for(int i=m-1;i>=0;i--)
13         tree[i]=tree[i<<1]+tree[i<<1|1];
14 }
15 void updata(int n,int v)
16 {
17     int kk=m+n;
18     tree[kk]+=v;
19     kk>>=1;
20     while(kk>=1)
21     {
22         tree[kk]+=v;
23         kk>>=1;
24     }
25 }
26 int query(int s,int r)
27 {
28 
29     int ans = 0;
30     for(s = m + s - 1, r = m + r + 1; s ^ r ^ 1; s >>= 1, r >>= 1)
31     {
32         if(~s&1) ans += tree[s^1];
33         if(r&1) ans += tree[r^1];
34     }
35     return ans;
36 
37 }
38 int main()
39 {
40     int jishu;
41     cin>>jishu;
42     for(int kk=1; kk<=jishu; kk++)
43     {
44         int n;
45         scanf("%d",&n);
46         csh(n);
47         char ch[20];
48         printf("Case %d:\n",kk);
49        while(scanf("%s",ch))
50         {
51 
52             if(ch[0]=='E')
53                break;
54             else
55             {
56                 int a,b;
57                 scanf("%d%d",&a,&b);
58                 if(ch[0]=='Q')
59                     cout<<query(a,b)<<endl;
60                 else
61                 {
62                     if(ch[0]=='A')
63                     {
64                         updata(a,b);
65                     }
66                     else
67                         updata(a,b*-1);
68                 }
69             }
70         }
71     }
72 }

 

转载于:https://www.cnblogs.com/blame/p/11343945.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值