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

线段树(单点更新)/树状数组 HDOJ 1166 敌兵布阵

 

题目传送门

 1 /*
 2     线段树基本功能:区间值的和,修改某个值
 3 */
 4 #include <cstdio>
 5 #include <cstring>
 6 #define lson l, m, rt << 1
 7 #define rson m+1, r, rt << 1|1
 8 
 9 const int MAX_N = 50000 + 10;
10 int sum[MAX_N<<2];
11 
12 void pushup(int rt)            //杭电大牛:notOnlySuccess 版本
13 {
14     sum[rt] = sum[rt<<1] + sum[rt<<1|1];
15 }
16 
17 void build(int l, int r, int rt)
18 {
19     if (l == r)
20     {
21         scanf ("%d", &sum[rt]);
22         return ;
23     }
24     int m = (l + r) >> 1;
25     build (lson);
26     build (rson);
27     pushup (rt);
28 }
29 
30 void update(int p, int add, int l, int r, int rt)
31 {
32     if (l == r)
33     {
34         sum[rt] += add;
35         return ;
36     }
37     int m = (l + r) >> 1;
38     if (p <= m)    update (p, add, lson);
39     else    update  (p, add, rson);
40     pushup (rt);
41 }
42 
43 int query(int ql, int qr, int l, int r, int rt)
44 {
45     if (ql <= l && r <= qr)
46     {
47         return sum[rt];
48     }
49     int m = (l + r) >> 1;
50     int ans = 0;
51     if (ql <= m)    ans += query (ql, qr, lson);
52     if (qr > m)        ans += query (ql, qr, rson);
53     
54     return ans;
55 }
56 
57 int main(void)            //HDOJ 1166 敌兵布阵
58 {
59     //freopen ("inA.txt", "r", stdin);
60     int t, n, cas, ans;
61     int b, c;
62     char s[10];
63     
64     while (~scanf ("%d", &t))
65     {
66         cas = 0;
67         while (t--)
68         {
69             scanf ("%d", &n);
70             build (1, n, 1);
71             printf ("Case %d:\n", ++cas);
72             while (~scanf ("%s", &s))
73             {
74                 if (strcmp (s, "End") == 0)    break;
75                 scanf ("%d%d", &b, &c);
76                 if (strcmp (s, "Query") == 0)
77                 {
78                     ans = query (b, c, 1, n, 1);
79                     printf ("%d\n", ans);
80                 }
81                 else if (strcmp (s, "Add") == 0)
82                 {
83                     update (b, c, 1, n, 1);
84                 }
85                 else if (strcmp (s, "Sub") == 0)
86                 {
87                     update (b, -c, 1, n, 1);
88                 }
89             }
90         }    
91     }
92     
93     return 0;
94 }
 1 /*
 2     树状数组
 3 */
 4 #include <cstdio>
 5 #include <cstring>
 6 
 7 const int MAX_N = 50000 + 10;
 8 int a[MAX_N];
 9 int n, num;
10 
11 int lowbit(int t)        //求 2^k
12 {
13     //return t & (t ^ (t - 1));
14     return t & (-t);
15 }
16 
17 void plus(int num, int x)        //第i个增加num个人
18 {
19     while (x <= n)
20     {
21         a[x] += num;
22         x += lowbit (x);
23     }
24 }
25 
26 int sum(int x)            //求前x项的和
27 {
28     int sum = 0;
29     while (x > 0)
30     {
31         sum += a[x];
32         x -= lowbit(x);
33     }
34     return sum;
35 }
36 
37 int main(void)
38 {
39     //freopen ("inA.txt", "r", stdin);
40 
41     int t;
42     char op[100];
43 
44     scanf ("%d", &t);
45     int k = t;
46 
47     while (k--)
48     {
49         memset (a, 0, sizeof (a));
50         scanf ("%d", &n);
51         for (int i=1; i<=n; ++i)
52         {
53             scanf ("%d", &num);
54             plus (num, i);
55         }
56         int r = 1;
57         while (scanf ("%s", &op), op[0] != 'E')
58         {
59             int a, b;
60             scanf ("%d%d", &a, &b);
61             switch (op[0])
62             {
63                 case 'A':
64                     plus (b, a);
65                     break;
66                 case 'S':
67                     plus (-b, a);
68                     break;
69                 case 'Q':
70                     if (r)
71                         printf ("Case %d:\n", t - k);
72                     r = 0;
73                     printf ("%d\n", sum (b) - sum (a-1));
74                     break;
75             }
76         }
77     }
78 
79     return 0;
80 }
树状数组

 

转载于:https://www.cnblogs.com/Running-Time/p/4506401.html

相关文章:

  • git fetch和git pull之间的区别--转载
  • centos 零碎学习小记 9.
  • Android中的windowSoftInputMode属性详解
  • 手机看:用例图
  • nginx实现负载均衡
  • Makefile文件的编写(1)
  • CDH使用之CM、CDH4、5卸载
  • 小菜学设计模式——单一职责原则
  • 算法-最大公约数
  • Androd开发之广告栏设计
  • nginx+lua+redis(openresty)配置
  • 模拟 2015百度之星资格赛 1003 IP聚合
  • 增值税发票管理解决方案
  • SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)...
  • Ubuntu 下 Mysql 新建数据库和用户
  • [译]前端离线指南(上)
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 0基础学习移动端适配
  • Consul Config 使用Git做版本控制的实现
  • django开发-定时任务的使用
  • Electron入门介绍
  • GitUp, 你不可错过的秀外慧中的git工具
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • js面向对象
  • js学习笔记
  • leetcode46 Permutation 排列组合
  • mysql 5.6 原生Online DDL解析
  • oschina
  • React-生命周期杂记
  • spark本地环境的搭建到运行第一个spark程序
  • Tornado学习笔记(1)
  • ucore操作系统实验笔记 - 重新理解中断
  • unity如何实现一个固定宽度的orthagraphic相机
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Vue组件定义
  • Web标准制定过程
  • 二维平面内的碰撞检测【一】
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 如何编写一个可升级的智能合约
  • 问题之ssh中Host key verification failed的解决
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (poj1.3.2)1791(构造法模拟)
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • .describe() python_Python-Win32com-Excel