nyoj116士兵杀敌2
题目链接: 士兵杀敌2
链接二
解法线段树,线段树有些像是特殊的二叉平衡树,不知道的可以搜搜二叉平衡树,可能并没有你想象中的那样难。
AC代码:
#include <stdio.h>
#include <stdlib.h>
struct node{int data, min, max, mid;//由min、max得到mid,小于mid的部分在左子树,大于mid的部分都在右子树。node *leftchild, *rightchild;//左右子节点。
};
typedef node * nodePoint;nodePoint CreateTree(int l, int r) {nodePoint newNode = (nodePoint)malloc(sizeof(node));//if(newNode == NULL)newNode->min = l;newNode->max = r;newNode->leftchild = NULL;newNode->rightchild = NULL;
newNode->data = 0;//初始化数据。
int m = (l+r)/2;newNode->mid = m;if(m >= l && l != r) newNode->leftchild = CreateTree(l, m);//如果没有&&l!=r这个条件,m==l且l==r时将是死循环。if(m < r) newNode->rightchild = CreateTree(m+1, r);return newNode;
}void addData(nodePoint ct, int n, int d) {while(ct->min < ct->max) {ct->data += d;//从跟节点到目标叶节点路径都加上dif(n <= ct->mid) ct = ct->leftchild;else ct = ct->rightchild;}ct->data += d;
}int queryData(nodePoint ct, int i, int j) {if(ct->min == i && ct->max == j) return ct->data;if(i > ct->mid) return queryData(ct->rightchild, i, j);//要询问的区间在右子树。if(j <= ct->mid) return queryData(ct->leftchild, i, j);return queryData(ct->leftchild, i, ct->mid)+queryData(ct->rightchild, ct->mid+1, j);//要询问的区间包含mid时。
}int main() {int n, m, x, i;char str[9];scanf("%d%d", &n, &m);nodePoint Tree = CreateTree(1,n);for(i = 1; i <= n; i++) {scanf("%d", &x);addData(Tree, i, x);}while(m--) {scanf("%s%d%d", str, &i, &x);if(str[0] == 'A') addData(Tree, i, x);else printf("%d\n", queryData(Tree, i, x));}return 0;
}
---BY HYK--
nyoj116士兵杀敌2相关推荐
- nyoj116 士兵杀敌(二)树状数组 插点问线
士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常想知 ...
- 士兵杀敌(二)(线段树+树状数组)
士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军 ...
- nyoj123士兵杀敌4-树状数组-改区间查点
士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,总会有一批编号连在一起人请战,最终他们获得相同军功 ...
- NYOJ 228 士兵杀敌(五)
士兵杀敌(五) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为0~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...
- NYOJ 123 士兵杀敌(四)
士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...
- NYOJ 119 士兵杀敌(三)
士兵杀敌(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比 ...
- NYOJ 116 士兵杀敌(二)
士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常想知 ...
- NYOJ 108 士兵杀敌(一)
士兵杀敌(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军现在想知 ...
- NYOJ 士兵杀敌(二) 树状数组
士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常想知 ...
最新文章
- android数据库isnull,Android中SQLite数据库知识点总结
- 树莓派3 64linux,树莓派3 model b安装64位debian+qt5.9
- Unity 中的协同程序
- 提取DVD视频盘的资源
- TCP发送接口(如send(),write()等)的返回值与成功发送到接收端的数据量无直接关系
- vue+elementUI 添加多个可以全选的多选框
- 封装jQuery下载文件组件
- ARM TK1 安装kinect驱动
- VC++中按钮,文本框,选择框的常用方法
- windows下工具
- 微星小飞机怎么超频?
- inode客户端linux 怎样运行,Ubuntu下安装iNode上网客户端
- 火车进站(出栈顺序问题)
- Outlook打不开的问题
- 计算机游戏攻略32关,保卫萝卜3游乐场第32关通关攻略 保卫萝卜3分享
- 开学季,给Java开发学习者的开发工具选择指南
- 关于解决主机和虚拟机ping不通的问题
- HMM-鲍姆-韦尔奇算法
- 3个5相乘列乘法算式_新人教版四年级数学上册4.2因数中间或末尾有0的乘法精讲...
- google code提供的免费的SVN服务器
热门文章
- IC攻城狮求职宝典 01 2018年IC设计企业 笔试题 01 英伟达(Nvidia)
- Docker 17.12.0 发布
- linux下升级python2.0到python3.0
- MyBatis多对多关联查询示例——MyBatis学习笔记之十八
- *2 echo、printf、mkdir命令的应用
- Java中动态获取项目根目录和tomcat的绝对路径
- 【springmvc+mybatis项目实战】杰信商贸-6.重点知识回顾
- 【非凡程序员】 OC第十八节课 (数据库mysql和sqlite3)
- 动态规划-装配线调度
- 海蜘蛛路由弹窗广告破解