2018年全国多校算法寒假训练营练习比赛(第五场)B Big Water Problem
2018-03-19 13:12
471 查看
链接:https://www.nowcoder.com/acm/contest/77/B
来源:牛客网
给一个数列,会有多次询问,对于每一次询问,会有两种操作:
1:给定两个整数x, y, 然后在原数组的第x位置上加y;
2:给定两个整数l,r,然后输出数组从第l位加到第r位数字的和并换行
输入描述:
第一行有两个整数n, m(1 <= n, m <= 100000)代表数列的长度和询问的次数
第二行n个数字,对于第i个数字a[i],(0<=a[i]<=100000)。
接下来m行,每一行有三个整数f, x, y。第一个整数f是1或者是2,代表操作类型,如果是1,接下来两个数x,y代表第x的位置上加y,如果是2,则求x到y的和,保证数据合法。
输出描述:
输出每次求和的结果并换行
示例1
输入
10 2
1 2 3 4 5 6 7 89 10
1 1 9
2 1 10
输出
64
就是一道树状数组的裸题,直接使用树状数组的知识往上套就好了#include<iostream>
using namespace std;
int num[100003];
long long c[100003];
int lowbit(int t)
{
return t&(-t);
}
void insert(int k, int d, int max)
{
while (k <= max)
{
c[k] += d;
k = k + lowbit(k);
}
}
long long getsum(int k)
{
long long t = 0;
while (k > 0)
{
t += c[k];
k -= lowbit(k);
}
return t;
}
int main()
{
int n,m;
int a, _c, b;
cin >> n>>m;
for (int i = 0; i <= n; i++) c[i] = 0;
for (int i = 1; i <= n; i++)
{
cin >> num[i];
insert(i, num[i], n);
}
for (int i = 0; i < m; i++)
{
cin >> a >> b >> _c;
if (a == 1)
{
insert(b, _c, n);
}
if (a == 2)
{
cout << getsum(_c) - getsum(b - 1)<<endl;
}
}
return 0;
}
来源:牛客网
给一个数列,会有多次询问,对于每一次询问,会有两种操作:
1:给定两个整数x, y, 然后在原数组的第x位置上加y;
2:给定两个整数l,r,然后输出数组从第l位加到第r位数字的和并换行
输入描述:
第一行有两个整数n, m(1 <= n, m <= 100000)代表数列的长度和询问的次数
第二行n个数字,对于第i个数字a[i],(0<=a[i]<=100000)。
接下来m行,每一行有三个整数f, x, y。第一个整数f是1或者是2,代表操作类型,如果是1,接下来两个数x,y代表第x的位置上加y,如果是2,则求x到y的和,保证数据合法。
输出描述:
输出每次求和的结果并换行
示例1
输入
10 2
1 2 3 4 5 6 7 89 10
1 1 9
2 1 10
输出
64
就是一道树状数组的裸题,直接使用树状数组的知识往上套就好了#include<iostream>
using namespace std;
int num[100003];
long long c[100003];
int lowbit(int t)
{
return t&(-t);
}
void insert(int k, int d, int max)
{
while (k <= max)
{
c[k] += d;
k = k + lowbit(k);
}
}
long long getsum(int k)
{
long long t = 0;
while (k > 0)
{
t += c[k];
k -= lowbit(k);
}
return t;
}
int main()
{
int n,m;
int a, _c, b;
cin >> n>>m;
for (int i = 0; i <= n; i++) c[i] = 0;
for (int i = 1; i <= n; i++)
{
cin >> num[i];
insert(i, num[i], n);
}
for (int i = 0; i < m; i++)
{
cin >> a >> b >> _c;
if (a == 1)
{
insert(b, _c, n);
}
if (a == 2)
{
cout << getsum(_c) - getsum(b - 1)<<endl;
}
}
return 0;
}
相关文章推荐
- 2018年全国多校算法寒假训练营练习比赛(第五场) Big Water Problem(树状数组)
- 牛客网NowCoder 2018年全国多校算法寒假训练营练习比赛(第五场)A.逆序数 B.Big Water Problem(线段树-区间查询求和和单点更新) F.The Biggest Water Problem H.Tree Recovery(线段树-区间查询求和和区间更新)
- 2018年全国多校算法寒假训练营练习比赛(第五场)The Biggest Water Problem
- 2018年全国多校算法寒假训练营练习比赛(第五场)F-The Biggest Water Problem
- 2018年全国多校算法寒假训练营练习比赛(第五场)题解 F The Biggest Water Problem
- 2018年全国多校算法寒假训练营练习比赛(第五场)G-送分啦-QAQ(博弈)
- 2018年全国多校算法寒假训练营练习比赛(第五场)G-送分啦-QAQ
- 2018年全国多校算法寒假训练营练习比赛(第五场) A 逆序数 树状数组 离散化
- 2018年全国多校算法寒假训练营练习比赛(第五场) C、字符串的问题
- 2018年全国多校算法寒假训练营练习比赛(第五场)题解G 送分啦-QAQ
- 2018年全国多校算法寒假训练营练习比赛(第五场) A 逆序数 树状数组 离散化
- 2018年全国多校算法寒假训练营练习比赛(第五场)
- 2018年全国多校算法寒假训练营练习比赛(第五场)
- 2018年全国多校算法寒假训练营练习比赛(第五场)G-Tree Recovery
- 2018年全国多校算法寒假训练营练习比赛(第五场) A 逆序数 树状数组 离散化
- B Big Water Problem 2018年全国多校算法寒假训练营练习比赛(第五场)
- 2018年全国多校算法寒假训练营练习比赛(第五场) G 送分啦-QAQ HDU 2516 斐波拉底博弈
- 2018年全国多校算法寒假训练营练习比赛(第五场)D集合问题详解
- 2018年全国多校算法寒假训练营练习比赛(第五场)送分啦-QAQ(斐波拉契博弈)
- 2018年全国多校算法寒假训练营练习比赛(第五场) G 送分啦-QAQ HDU 2516 斐波拉底博弈