博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树状数组
阅读量:5129 次
发布时间:2019-06-13

本文共 2194 字,大约阅读时间需要 7 分钟。

 

 

一个区间,两种操作:区间求和,单点修改。

 

 

 

#include 
#include
#include
#include
using namespace std;#define maxn 100000 + 1000int n, a[maxn], C[maxn];int lowbit(int x){ return x & -x;}void add(int x, int val){ for (int i = x; i <= n; i += lowbit(i)) C[i] += val;}int sum(int x){ int ans = 0; for (int i = x; i > 0; i -= lowbit(i)) ans += C[i]; return ans;}int main(){ int t; scanf("%d", &t); for (int ca = 1; ca <= t; ca++) { scanf("%d", &n); memset(C, 0, sizeof(C)); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); add(i, a[i]); } printf("Case %d:\n", ca); char s[10]; while(~scanf("%s", s) && s[0] != 'E') { int l, r; scanf("%d%d", &l, &r); if (s[0] == 'A') add(l, r); if (s[0] == 'S') add(l, -r); if (s[0] == 'Q') printf("%d\n", sum(r) - sum(l-1)); } }}

 

 

 

 

单点修改,区间求最大值。

 

 

#include 
#include
#include
#include
using namespace std;#define maxn 200000 + 1000int n, m, a[maxn], C[maxn];int lowbit(int x){ return x & -x;}void updata(int x, int val){ a[x] = val; for (int i = x; i <= n; i += lowbit(i)) C[i] = max(C[i], val);} int found(int l, int r){ int ans = a[r]; while(l != r) { for (r -= 1; r - lowbit(r) >= l; r -= lowbit(r)) ans = max(ans, C[r]); ans = max(ans, a[r]); } return ans;}int main(){ while(~scanf("%d%d", &n, &m)) { memset(C, 0, sizeof(C)); memset(a, 0, sizeof(a)); for (int i = 1; i <= n; i++) { int x; scanf("%d", &a[i]); updata(i, a[i]); } char c; for (int i = 1; i <= m; i++) { getchar(); int l, r; scanf("%c%d%d", &c, &l, &r); if (c == 'U') updata(l, r); if (c == 'Q') printf("%d\n", found(l, r)); } }}

 

转载于:https://www.cnblogs.com/ruthank/p/9445132.html

你可能感兴趣的文章
opencv2函数学习之erode、dilate:图像腐蚀和膨胀
查看>>
OkHttp下载文件中途断网报Can't create handler inside thread that has not called Looper.prepare()异常的解决办法...
查看>>
ASP.NET五步打包下载Zip文件
查看>>
android的style控制Theme
查看>>
Common xaml controls(补交作业)
查看>>
tensorflow函数解析:Session.run和Tensor.eval的区别
查看>>
Ext.Ajax.request 与formPanel.getForm().submit() success的区别
查看>>
基于 select2 插件的自做效果
查看>>
mv命令
查看>>
mysql读写分离
查看>>
webRTC源码下载 Windows Mac(iOS) Linux(Android)全
查看>>
函数和方法的区别
查看>>
树剖想法题——BZOJ3626
查看>>
master
查看>>
Duilib使用wke显示echarts
查看>>
linux lsof用法
查看>>
windows(64位)下使用curl命令
查看>>
杭电2093
查看>>
字符串 “ ” 的方法
查看>>
Android初学第72天
查看>>