当前位置: 首页 > news >正文

hdu 1166 敌兵布阵 ( 线段树或者树状数组)

线段树:

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 int sum;
 5 int s1[100000],s2[1000000];
 6 int build(int l,int r,int p)
 7 {
 8    if (l==r) return s2[p]=s1[l];
 9    int m=(l+r)/2;
10    int a=build(l,m,2*p);
11    int b=build(m+1,r,2*p+1);
12    return s2[p]=a+b;
13 }
14 void un(int l,int r,int p,int pos,int c)
15 {
16     if (l<=pos&&r>=pos) s2[p]+=c;
17     if (l==r) return ;
18     int m=(l+r)/2;
19     if (pos<=m) un(l,m,2*p,pos,c);
20     else un(m+1,r,2*p+1,pos,c);
21     return ;
22 }
23 void find(int l,int r,int p,int ll,int rr)
24 {
25     if (ll<=l&&rr>=r) {sum+=s2[p];return ;}
26     if (ll>r||rr<l) return ;
27     int m=(l+r)/2;
28     find(l,m,2*p,ll,rr);
29     find(m+1,r,2*p+1,ll,rr);
30     return ;
31 }
32 int main()
33 {
34     int n,i,k,c,a,b;
35     char s[10];
36     scanf("%d",&c);
37     for (k=1;k<=c;k++)
38     {
39         //if (k!=1) printf("\n");
40         printf("Case %d:\n",k);
41         scanf("%d",&n);
42         for (i=1;i<=n;i++) scanf("%d",&s1[i]);
43         build(1,n,1);
44         while (~scanf("%s",&s))
45         {
46             if (s[0]=='E') break;
47             scanf("%d%d",&a,&b);
48             if (s[0]=='A') un(1,n,1,a,b);
49             if (s[0]=='S') un(1,n,1,a,-b);
50             if (s[0]=='Q')
51             {
52                 sum=0;
53                 find(1,n,1,a,b);
54                 printf("%d\n",sum);
55             }
56         }
57     }
58     return 0;
59 }

 

树状数组:

 

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 const int mx = 100005;
 7 int a[mx];
 8 int n;
 9 
10 int lowbit(int x)
11 {
12     return x&-x;
13 }
14 
15 void updata(int i,int x)
16 {
17     if (i>n) return ;
18     a[i]+=x;
19     i+=lowbit(i);
20     updata(i,x);
21 }
22 
23 int sum(int i)
24 {
25     if (i<=0) return 0;
26     return a[i]+sum(i-lowbit(i));
27 }
28 
29 int main()
30 {
31    int t;
32    scanf("%d",&t);
33    for (int cas=1;cas<=t;cas++)
34    {
35        printf("Case %d:\n",cas);
36        scanf("%d",&n);
37        memset(a,0,sizeof(a));
38        for (int i=1;i<=n;i++)
39        {
40            int b;
41            scanf("%d",&b);
42            updata(i,b);
43        }
44        char s[10];
45        while(1)
46        {
47            int u,v;
48            scanf("%s",s);
49            if (s[0]=='E') break;
50            scanf("%d%d",&u,&v);
51            if (s[0]=='Q') printf("%d\n",sum(v)-sum(u-1));
52            if (s[0]=='A') updata(u,v);
53            if (s[0]=='S') updata(u,-v);
54        }
55    }
56 }

 

转载于:https://www.cnblogs.com/pblr/p/4717963.html

相关文章:

  • WIN7 自动同步服务器上备份文件
  • swift UI特殊培训38 与滚动码ScrollView
  • Objective-C:在类中设置不同协议
  • React Native 简介:用 JavaScript 搭建 iOS 应用(2)
  • 以ASPX生成静态页
  • android获得屏幕高度和宽度
  • 项目直播:任务管理系统应用
  • 苹果电脑键盘符号记录
  • 转:Windows 8上强制Visual Studio以管理员身份运行
  • BZOJ 1047: [HAOI2007]理想的正方形( 单调队列 )
  • HDU 2955(0-1背包问题)
  • Unity Shader:Projective Texture Mapping
  • POJ-3414 Pots (BFS)
  • 台大机器学习基石课程之机器学习基本原理和概念
  • 【转载】Android 开发 命名规范
  • [PHP内核探索]PHP中的哈希表
  • 收藏网友的 源程序下载网
  • @jsonView过滤属性
  • 5、React组件事件详解
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Gradle 5.0 正式版发布
  • gulp 教程
  • java正则表式的使用
  • LeetCode18.四数之和 JavaScript
  • PaddlePaddle-GitHub的正确打开姿势
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Sublime text 3 3103 注册码
  • Yeoman_Bower_Grunt
  • Yii源码解读-服务定位器(Service Locator)
  • 复杂数据处理
  • 如何优雅地使用 Sublime Text
  • 以太坊客户端Geth命令参数详解
  • 用element的upload组件实现多图片上传和压缩
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​一些不规范的GTID使用场景
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (ibm)Java 语言的 XPath API
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .net 7 上传文件踩坑
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .Net语言中的StringBuilder:入门到精通
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @Autowired @Resource @Qualifier的区别
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @RequestParam,@RequestBody和@PathVariable 区别
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [22]. 括号生成
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians