NYOJ 123 士兵杀敌4-树状数组的插线求点
士兵杀敌(四)
- 描述
-
南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一个人到底有多少军功就是一个比较困难的事情,军师小工的任务就是在南将军询问他某个人的军功的时候,快速的报出此人的军功,请你编写一个程序来帮助小工吧。
假设起始时所有人的军功都是0.
- 输入
- 只有一组测试数据。
每一行是两个整数T和M表示共有T条指令,M个士兵。(1<=T,M<=1000000)
随后的T行,每行是一个指令。
指令分为两种:
一种形如
ADD 100 500 55 表示,第100个人到第500个人请战,最终每人平均获得了55军功,每次每人获得的军功数不会超过100,不会低于-100。
第二种形如:
QUERY 300 表示南将军在询问第300个人的军功是多少。 - 输出
- 对于每次查询输出此人的军功,每个查询的输出占一行。
- 样例输入
-
4 10
ADD 1 3 10
QUERY 3
ADD 2 6 50
QUERY 3 - 样例输出
-
10
60
和树状数组插点求线刚好相反,插线求点看上去似乎是插点求线的逆操作,插点求线操作是:插点时更新后方+lowbit位置,求线时统计前方-lowbit的和,插线求点反而是插线时修改前方lowbit位置值,求点时统计后方lowbit的和,插点求线代码见士兵杀敌(二),以下是插线求点的方法:
#include<stdio.h>
int t, m;
int array[1000010];
int Lowbit(int x)
{
return x & (-x);
}
int get(int x)
{
int sum = 0;
while(x <= m)
{
sum += array[x];
x += Lowbit(x);
}
return sum;
}
void modify(int x, int num)
{
while(x > 0)
{
array[x] += num;
x -= Lowbit(x);
}
}
int main()
{
char str[10];
int i;
scanf("%d%d", &t, &m);
for(i = 1; i <= t; i++)
{
scanf("%s", str);
int s, e, number;
if(str[0] == 'A')
{
scanf("%d%d%d", &s, &e, &number);
modify(s-1, -number);
modify(e, number);
}
else
{
scanf("%d", &number);
printf("%d\n", get(number));
}
}
return 0;
}
NYOJ 123 士兵杀敌4-树状数组的插线求点的更多相关文章
- NYOJ 116士兵杀敌(二) 树状数组
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=116 士兵杀敌(一) 数组是固定的,所以可以用一个sum数组来保存每个元素的和就行,但是不 ...
- nyoj123_士兵杀敌(四)_树状数组_插线求点
士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战 ...
- HDU 1556 线段树或树状数组,插段求点
1.HDU 1556 Color the ball 区间更新,单点查询 2.题意:n个气球,每次给(a,b)区间的气球涂一次色,问最后每个气球各涂了几次. (1)树状数组 总结:树状数组是一个查 ...
- nyoj 123 士兵杀敌(四) 树状数组【单点查询+区间修改】
士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战 ...
- nyoj 123 士兵杀敌(四)【树状数组】+【插线问点】
树状数组有两种情况:插点问线和插线问点.这道题是插线问点. 由于树状数组最简单的作用是计算1~x的和,所以给出(a, b. c).表示(a,b)区间添加c, 那我们仅仅须要在a点原来的基础上添加c,然 ...
- NYOJ 231 Apple Tree (树状数组)
题目链接 描述 There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in t ...
- uva11610 树状数组+素数打表求因子,好题!
/* uva11610 树状数组+素数打表+离散化 打出的素数范围在2-1000000之间,不超过六位数,然后按照格式翻转成七位数 */ #include<bits/stdc++.h> u ...
- Kattis - Fenwick Tree(树状数组区间更新单点求值)
Fenwick Tree Input The first line of input contains two integers NN, QQ, where 1≤N≤50000001≤N≤500000 ...
- NYOJ 123 士兵杀敌(四) (线段树)
题目链接 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个 ...
随机推荐
- apache commons vfs 文件夹监控
package test.vfs; import java.io.File; import org.apache.commons.logging.Log; import org.apache.comm ...
- Character 比较注意先要转换成字符串类型
Character tmp = '/'; if("/".equals(tmp)){ System.out.print("error"); } if(" ...
- Neutron Networking QoS
目前,Neutron有一个QoS的proposal(https://wiki.openstack.org/wiki/Neutron/QoS#Documents),但是只有Ciscso和NVP插件实现了 ...
- vs2010 release 模式加了断点,跑代码无法跟踪,解决方法
纯跑代码,不是附加进程调试. 打开不能调试的类库项目属性页面→切换到生成选项卡→点击高级按钮→将调试信息一项设置 将“调试信息”设置为“pdb-only”. 我是按图上的设置就正常了. -- 201 ...
- 剑指offer系列37----数据流中的中位数
[题目]如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值, * 那么中位数就是所有数值排序之后位于中间的数值. package com.exe8.offer; import java.uti ...
- MySQL计算时间差
MySQL计算两个日期的时间差函数:TIMESTAMPDIFF 语法: TIMESTAMPDIFF(interval, datetime_expr1, datetime_expr2) interval ...
- bzoj3135: [Baltic2013]pipesd
Description 有n个水库,m条管道.Jester会在某些管道中间凿开一个洞,让水流出来或者用水泵把水打进去.保证这个流速是偶数.对于一条管道(u, v),如果在中间凿开了一个洞让水流出来,流 ...
- bzoj3036: 绿豆蛙的归宿
Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点.到达每 ...
- RHCE7.0练习题汇总[转]
RHCE7.0练习题汇总38 RHCSA部分 关于密码破解,在上午的考试中需要我们自己安装图形化界面和破解root密码,root的密码按照题目的要求来进行修改.可以使用单用户模式或者使用上课讲的re. ...
- S3C2440之MMU
转自:http://blog.chinaunix.net/uid-23193900-id-3187782.html 1.MMU简介 MMU(Memory Management Unit),内存管 ...