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 ...
随机推荐
- Windows Server 2008 R2微软官方下载
注意:Windows Server 2008 R2仅有64位版本. 以下下载地址为Windows Server 2008 R2 RTM Build 7600.16385的评估版本,此版本可免费试用18 ...
- 创建maven项目前的准备工作
第二步: 在maven中的settings.xml文件中指定 2.1 本地仓库:计算机中一个文件夹,自己定义是哪个文件夹. 2.1 示例语法 <localRepository>D:/mav ...
- jenkins 自动触发
在gitlab上配置连接jenkins ,将Jenkins的Secret token 与Build URL 复制到gitlab中 在settings标签下面,找到OutBound Request,勾选 ...
- Pandas基础知识(一)
Pandas的主要结构有DataFrame和Series. 生成一个Series对象. 关于部分Series的索引操作. Series也可以通过字典生成. DataFrame是一个表格型的数据,它既有 ...
- 用R包中heatmap画热图
一:导入R包及需要画热图的数据 library(pheatmap) data<- read.table("F:/R练习/R测试数据/heatmapdata.txt",head ...
- Socket通讯-Netty框架实现Java通讯
Netty简介 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty ...
- Shared Preferences
[Shared Preferences] 1.SharedPreferences class. Interface for accessing and modifying preference da ...
- PLM修改数据库密码
在WINDCHILL SHELL中执行以下命令: xconfmanager -s wt.pom.dbPassword=数据库密码 -t db/db.properties -p 重启服务
- 搭建php渗透测试环境
php服务器下载地址 http://vdisk.weibo.com/s/D9I4jIIfNddvh 在C盘下创建一个www文件夹 安装phpstudy 下一步安装 修改配置文件 将端口改成8080 保 ...
- python--第二天总结
一.作用域只要变量在内存中存在,则就可以使用.(栈) 二.三元运算result = 值result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为假:result ...