hdu 1754(基础线段树) I Hate It
http://acm.hdu.edu.cn/showproblem.php?pid=1754
数据比较大,暴力会超时,所以明显是线段树,普通的线段树,结构体中多开一个值sum储存每个子区间的最大成绩,借此更新和查找就行,差不多就是裸的线段树模板
这种基础的要思考透,多按自己的思想修改修改尝试,不然后面的线段树学习会很吃力
code
#include<cstdio>
using namespace std;
struct point {
int l,r,sum;
};
point tree[*];
int a[];
int max(int x,int y)
{
if (x>y) return x;
else return y;
}
void build(int i,int left,int right)//建树
{
tree[i].l=left,tree[i].r=right;
if (left==right)
{
tree[i].sum=a[left];
return;
}
int mid=(left+right)/;
build(i*,left,mid);
build(i*+,mid+,right);
tree[i].sum=max(tree[i*].sum,tree[i*+].sum);
}
void update(int i,int pos,int ans)//更新
{
if (pos<tree[i].l||tree[i].r<pos)
return ;
if (pos==tree[i].l&&tree[i].r==pos)
{
tree[i].sum=ans;
return ;
}
int mid=(tree[i].l+tree[i].r)/;
if (pos<=mid)
update(i*,pos,ans);
else
update(i*+,pos,ans);
tree[i].sum=max(tree[i*].sum,tree[i*+].sum);
return ;
}
int find(int i,int left,int right)// 查找
{
if (left>tree[i].r||right<tree[i].l)
return ;
if (left<=tree[i].l&&right>=tree[i].r)
return tree[i].sum;
int a=,b=;
a=find(i*,left,right);
b=find(i*+,left,right);
return max(a,b);
}
int main()
{
int n,m,x,y,i;
char op;
while (~scanf("%d %d",&n,&m))
{
for (i=;i<=n;i++)
scanf("%d",&a[i]);
build(,,n);
while (m--)
{
getchar();
scanf("%c %d %d",&op,&x,&y);
if (op=='Q')
{
printf("%d\n",find(,x,y));
}
if (op=='U')
{
a[x]=y;
update(,x,y);
}
}
}
return ;
}
hdu 1754(基础线段树) I Hate It的更多相关文章
- HDU 1754(线段树区间最值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 4031 attack 线段树区间更新
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)Total Subm ...
- hdu 4288 离线线段树+间隔求和
Coder Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- hdu 3016 dp+线段树
Man Down Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- HDU 5877 dfs+ 线段树(或+树状树组)
1.HDU 5877 Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...
- HDU 3308 LCIS (线段树区间合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题目很好懂,就是单点更新,然后求区间的最长上升子序列. 线段树区间合并问题,注意合并的条件是a[ ...
- HDU 2795 Billboard (线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题目大意:有一块h*w的矩形广告板,要往上面贴广告; 然后给n个1*wi的广告,要求把广告贴 ...
- hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值
Conturbatio Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=54 ...
- hdu 1828 Picture(线段树 || 普通hash标记)
http://acm.hdu.edu.cn/showproblem.php?pid=1828 Picture Time Limit: 6000/2000 MS (Java/Others) Mem ...
随机推荐
- CXF使用JMS作为传输协议的配置
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...
- async.waterfall
[async.waterfall] if any of the tasks pass an error to their own callback, the next function is not ...
- python pbr 打包
在之前学习stevedore时,在setup.py中使用setuptools打包发布了代码,然后调用代码中的实例化对象.参考我的文章 https://www.cnblogs.com/CaesarLin ...
- html开发环境
标签(空格分隔): 环境 开发环境: 市面上有很多的HTML编辑器可以选择,常见的Hbuild.Sublime Text.Dreamweare都可以用来开发HTML. 当然PyCharm也支持HTML ...
- python 内置函数(二) 进阶函数 递归内容及二分法查找 知识点
1,lambda: 匿名函数 2.sorgted() 排序函数 3,filter() 过滤函数 筛选 4,map() 映射函数 5.递归 6.二分法 一. 匿名函数: lambda lamb ...
- Could not open Selected VM debug port (8700) (转)
版权声明:本文为博主原创文章,未经博主允许不得转载. 在运行项目的时候,eclipse弹出提示框“Could not open Selected VM debug port (8700). Make ...
- PUDN用户名与密码
Pudn 用户名与密码 boumang8171 que2538 温馨提示:1. 95%的用户第一次登录不成功,都是因为在复制粘贴帐号和密码时,把空格也复制粘贴上了.2. 如果连续3次帐号或密 ...
- STL:unordered_set/unordered_multiset(c++11)
unordered_set:容器内的元素无序排列,基于值进行获取单个元素速度非常快.内部根据它们的 hash value 被组织成 buckets(slot). unordered_multiset: ...
- LibreOj 6279数列分块入门 3 练习了一下set
题目链接:https://loj.ac/problem/6279 推荐博客:https://blog.csdn.net/qq_36038511/article/details/79725027 这题区 ...
- 聚合查询、分组查询、F&Q查询
一.聚合查询和分组查询 1.aggregate(*args, **kwargs): 通过对QuerySet进行计算,返回一个聚合值的字典.aggregate()中每个参数都指定一个包含在字典中的返回值 ...