题意:

输入一行数字,查询第i个数到第j个数之间的最大值。可以修改其中的某个数的值。

输入:

包含多组输入数据。

每组输入首行两个整数n,m。表示共有n个数,m次操作。

接下来一行包含n个整数。

接下来m行,每行包含一个字母s,两个整数a,b。

当s为’Q’,表示查询第a个数到第b个数之间的最大值。

当s为’U’,表示将第a个数更改为b。

输出:

每次查询输出一个结果,每次输出占一行。

题解:

点修改区间求最值,可以用树状数组模板。

具体见代码——

 #include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std; const int N = ; int a[N], c[N];
int t, n, m; int lowbit(int x)
{
return x&(-x);
} void Maxn(int x, int y)
{
a[x] = y;
for(int i = x; i <= n; i += lowbit(i)) //需要修改的c[]
{
c[i] = y;
for(int j = ; j < lowbit(i); j <<= ) //修改时需要比较的c[]
{
c[i] = c[i] > c[i-j] ? c[i] : c[i-j];
}
}
} void Init()
{
int y;
memset(c, , sizeof(c));
for(int i = ; i <= n; i++)
{
scanf("%d", &y);
a[i] = y;
c[i] = y;
for(int j = ; j <lowbit(i); j <<= ) //需要比较的c[]
c[i] = c[i] > c[i-j] ? c[i] : c[i-j];
}
} void Query(int l, int r)
{
int ans = ;
while()
{
ans = ans > a[r] ? ans : a[r];
if(r == l) break;
for(r -= ; r-l >= lowbit(r); r -= lowbit(r))
ans = ans > c[r] ? ans : c[r];
}
printf("%d\n", ans);
} void Work()
{
char s[];
int x, y;
for(int i = ; i <= m; i++)
{
scanf("%s%d%d", s, &x, &y);
if(s[] == 'U') Maxn(x, y);
else if(s[] == 'Q') Query(x, y);
}
} int main()
{
//freopen("test.in", "r", stdin);
while(~scanf("%d%d", &n, &m))
{
Init();
Work();
}
}

树状数组区间求最值模板——

http://www.cnblogs.com/mypride/p/5002556.html

hdu 1754 I Hate It(树状数组区间求最值)2007省赛集训队练习赛(6)_linle专场的更多相关文章

  1. HDU 1754 I hate it 树状数组维护区间最大值

    Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写 ...

  2. HDU 1556 Color the ball (树状数组区间更新)

    水题,练习一下树状数组实现区间更新. 对于每个区间,区间左端点+1,右端点的后一位-1,查询每个位置的覆盖次数 #include <cstdio> #include <cstring ...

  3. HDU3874 /HDU3333 树状数组 区间求不重复数和

    Necklace Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  4. HDU2838 Cow Sorting 树状数组 区间求和加逆序数的应用

    这题目意思非常easy,就是给你一个数组,然后让你又一次排好序,排序有要求的,每次仅仅能交换两个元素的位置,交换须要一个代价 就是两个元素之和,问你把数组重小到大排好最少须要多少代价 可能一開始想不到 ...

  5. HDU 5862 Counting Intersections(离散化+树状数组)

    HDU 5862 Counting Intersections(离散化+树状数组) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 D ...

  6. hdu 5517 Triple(二维树状数组)

    Triple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  7. hdu 4638 树状数组 区间内连续区间的个数(尽可能长)

    Group Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  8. HDU 3015 Disharmony Trees(树状数组)

    题意:给你n棵树,每棵树上有两个权值X H 对于X离散化 :3 7 1 5 3 6 -> 2 6 1 4 2 5,对于H一样 然后F = abs(X1-X2)   S=min(H1,H2) 求出 ...

  9. HDU 4455 Substrings --递推+树状数组优化

    题意: 给一串数字,给q个查询,每次查询长度为w的所有子串中不同的数字个数之和为多少. 解法:先预处理出D[i]为: 每个值的左边和它相等的值的位置和它的位置的距离,如果左边没有与他相同的,设为n+8 ...

随机推荐

  1. oracle connect by用法篇 (转)

    1.基本语法 select * from table [start with condition1] connect by [prior] id=parentid 1 2 1 2 一般用来查找存在父子 ...

  2. 流媒体技术学习笔记之(十一)Windows环境运行EasyDarwin

    流媒体平台框架下载安装 Github下载 下载地址:https://github.com/EasyDarwin/EasyDarwin/releases 解压安装 选择Windows 安装平台的安装包( ...

  3. .NET面试题系列(三)排序算法

    冒泡排序 , , , , , 7, 2, 4 }; //外层循环控制排序趟数 ; i < arr.Length - ; i++) { //内层循环控制每一趟排序多少次 ; j < arr. ...

  4. [整理]win7下VS2010遇到内存不足解决方发

    电脑重装Win7 64bit不久后,一天内VS2010使用久了,就会出现内存不足,实际内存使用情况却不是,显示内存已使用70%.以前没有遇到过,经网上查找,貌似是VS2010对内存计算会在某些情况下计 ...

  5. [整理]javascript压缩、格式化

    1.使用packer来压缩JS文件 packer工具在线版:http://dean.edwards.name/packer/ 通过packer对js打包压缩的同时,执行Base62 encode编码后 ...

  6. iOS必学技-cocoapods

    我就不再造轮子了,网上的教程很详细,楼主亲测,好用. http://code4app.com/article/cocoapods-install-usage 楼主安装使用过程中遇到以下几个问题,同学们 ...

  7. 第11月第23天 markedTextRange 崩溃

    1. 在对textView.textField限制文字长度时,如果不做特殊处理,当联想文字加上已输入文字超出设定长度时,iOS 7.0系统会崩溃(ios 8.0以上系统做了处理,不会崩溃). http ...

  8. Hive笔记之严格模式(strict mode)

    Hive有一个严格模式,在严格模式下会对可能产生较大查询结果的语句做限制,禁止其提交执行. 一.切换严格模式 查看当前的模式: hive> set hive.mapred.mode; hive. ...

  9. EM算法理解

    一.概述 概率模型有时既含有观测变量,又含有隐变量,如果概率模型的变量都是观测变量,那么给定数据,可以直接利用极大似然估计法或者贝叶斯估计法估计模型参数.但是,当模型同时又含有隐变量时,就不能简单地使 ...

  10. sync 解释

    sync命令用于强制被改变的内容立刻写入磁盘,更新超块信息. 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率.sync命令则 ...