问题描述

有n个格子,从左到右放成一排,编号为1-n。
共有m次操作,有3种操作类型:
1.修改一个格子的权值,
2.求连续一段格子权值和,
3.求连续一段格子的最大值。
对于每个2、3操作输出你所求出的结果。
输入格式
第一行2个整数n,m。
接下来一行n个整数表示n个格子的初始权值。
接下来m行,每行3个整数p,x,y,p表示操作类型,p=1时表示修改格子x的权值为y,p=2时表示求区间[x,y]内格子权值和,p=3时表示求区间[x,y]内格子最大的权值。
输出格式
有若干行,行数等于p=2或3的操作总数。
每行1个整数,对应了每个p=2或3操作的结果。
样例输入
4 3
1 2 3 4
2 1 3
1 4 3
3 1 4
样例输出
6
3
数据规模与约定
对于20%的数据n <= 100,m <= 200。
对于50%的数据n <= 5000,m <= 5000。
对于100%的数据1 <= n <= 100000,m <= 100000,0 <= 格子权值 <= 10000。
分析:用结构体数组建立一棵线段树~当p==1时从上到下更新这个线段树的值,当p==2的时候搜索对应区间内的总和~当p==3的时候搜索对应区间的最大值~

#include <iostream>
#define max(a, b) a > b ? a : b;
using namespace std;struct node {int l;int r;int maxvalue;int sum;
} a[1000000];void init(int left, int right, int i) {a[i].l = left;a[i].r = right;a[i].maxvalue = 0;a[i].sum = 0;if(left != right) {int mid = (left + right) / 2;init(left, mid, 2 * i);init(mid + 1, right, 2*i+1);}
}void insert(int i, int j, int value) {if(a[i].l == a[i].r) {a[i].maxvalue = value;a[i].sum = value;return ;}int mid = (a[i].l + a[i].r) / 2;if(j <= mid)insert(2 * i, j, value);elseinsert(2 * i + 1, j, value);a[i].maxvalue = max(a[2*i].maxvalue, a[2*i+1].maxvalue);a[i].sum = a[2*i].sum + a[2*i+1].sum;
}int find_sum(int i, int x, int y) {if(x == a[i].l && y == a[i].r) {return a[i].sum;}int mid = (a[i].l + a[i].r) / 2;if(y <= mid)return find_sum(2*i, x, y);else if(x > mid)return find_sum(2*i+1, x, y);elsereturn find_sum(2*i, x, mid)+ find_sum(2*i+1, mid+1, y);
}int find_max(int i, int x, int y) {if(x == a[i].l && y == a[i].r) {return a[i].maxvalue;}int mid = (a[i].l + a[i].r) / 2;if(y <= mid)return find_max(2*i, x, y);else if(x > mid)return find_max(2*i+1, x, y);elsereturn max(find_max(2*i, x, mid), find_max(2*i+1, mid+1, y));
}int main() {int n, m;cin >> n >> m;init(1, n, 1);int value;for(int j = 1; j <= n; j++) {cin >> value;insert(1, j, value);}for(int k = 0; k < m; k++) {int p, x, y;cin >> p >> x >> y;if(p == 1)insert(1, x, y);if(p == 2)cout << find_sum(1, x, y) << endl;if(p == 3)cout << find_max(1, x, y) << endl;}return 0;
}

蓝桥杯 ALGO-8 算法训练 操作格子(线段树)相关推荐

  1. 蓝桥杯:试题 算法训练 Remember the A La Mode

    蓝桥杯:试题 算法训练 Remember the A La Mode 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Hugh Samston经营着一个为今年的ICPC世界总决赛的参 ...

  2. java实现 蓝桥杯 算法训练 操作格子

    问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3种操作类型: 1.修改一个格子的权值, 2.求连续一段格子权值和, 3.求连续一段格子的最大值. 对于每个2.3操作输出你所求 ...

  3. 矩阵乘法 算法训练 试题_蓝桥杯习题集_ 算法训练 矩阵乘法

    原文: 算法训练 矩阵乘法 时间限制:1.0s   内存限制:512.0MB 问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s, ...

  4. 试题 算法训练 操作格子(线段树模板题)

    资源限制 内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3 ...

  5. 蓝桥杯练习系统算法训练习题加答案java版本

    附上百度文库的链接:http://wenku.baidu.com/view/afb78d36b42acfc789eb172ded630b1c59ee9bf7 转载于:https://www.cnblo ...

  6. java蓝桥杯的题_Java蓝桥杯试题集——算法训练ALGO-116——最大的算式

    题目要求 解题思路 动态规划,今天才弄明白QAQ,借鉴了这位大佬的博客,曹磊的博客 写的很好!但是我觉得我的循环方式更容易理解嘿嘿嘿~ 首先建立如下图的数组,行数代表前几位数,列数代表有几个乘号.将第 ...

  7. 蓝桥杯练习系统—算法训练 s01串

    第一部分:题目 问题描述 s01串初始为"0" 按以下方式变换 0变1,1变01 输入格式 1个整数(0~19) 输出格式 n次变换后s01串 样例输入 3 样例输出 101 数据 ...

  8. 蓝桥杯:试题 算法训练 采油区域 矩阵前缀和+动态规划+分治+枚举

    资源限制 时间限制:2.0s 内存限制:512.0MB 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地为一个矩形区域,被划分为M× ...

  9. 蓝桥杯-黑色星期五(算法训练)

    题目描述: 有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是"诸事不宜".请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是1 ...

最新文章

  1. oracle 创建空文件系统,六分钟学会创建Oracle表空间的实现步骤
  2. 【Ping】unix - ping命令的退出状态
  3. (android实战)Service 生命周期和使用注意项
  4. android uid systemui,(android)system ui 内存优化
  5. Python学习总结之四 -- 这就是Python的字典
  6. WriteFile API简介
  7. POJ 3669 简单BFS
  8. 免费下载 客道巴巴文档 教程
  9. Java word转pdf字体格式和样式变乱的问题
  10. 预见2022 | 吴晓波年终秀 附PPT
  11. 二维数组与指针(详解)
  12. 计算机电脑如何快捷粘贴,电脑粘贴快捷键在哪里【详细介绍】
  13. grub.exe和grldr的区别和联系
  14. wrf模式计算机配置,科学网-WRF模式的运行-张乐乐的博文
  15. SharePoint服务器端对象模型 之 使用CAML进行数据查询
  16. 无限流量与5G要来,我们距淘汰Wi-Fi还有多远?
  17. 利用福禄克光纤测试仪了解综合布线
  18. 灰色关联分析——Excel实现
  19. kali连接不上网络
  20. 【matlab教程】20、简单网格细分

热门文章

  1. 直接拿来用!超实用的Java数组技巧攻略
  2. JavaScript知识点之如何使用匿名的方法做条件判断
  3. Jquery插件之ajaxForm ajaxSubmit的理解用法
  4. 2017年3月份前端资源分享
  5. [框架][MyBatis]MyBatis集锦
  6. Quartz2D使用(截屏)
  7. mysql update from 子查询
  8. 可蠕虫 DarkRadiation 勒索软件瞄准 Linux 和 Docker 实例
  9. Exploit 代码用于攻击中?GitHub 马上删除
  10. Python排序算法[二]:测试数据的迷雾散去