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 ...
随机推荐
- Anaconda安装及配合pycharm使用
首先到https://www.anaconda.com/download/下载合适的anaconda版本.如Windows 64bit. 下载了直接双击开始下载,一路同意下去,到选择安装的目录.这里选 ...
- HTTP中的Get与Post
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这 样认为:一个URL地址,它用于描述一个网络上的资源,而HTT ...
- css图标库 font-awesome.min.css
下载font-awesome-4.4.0 同时引入font-awesome-4.4.0.min.css 通过<i class='fa fa-sign-out'></i>生成图片 ...
- linux下的arm汇编程序
1.gnu 的编译环境搭建 解压编译工具,加入环境变量PATH 2.编译相关命令的使用 编译命令 arm-linux-gcc -g -c -o led.o main.o led.c main.c / ...
- jdbc连接模拟用户登陆密码判断
package com.aaa.demo1; import com.aaa.utils.JdbcUtils; import java.sql.Connection; import java.sql.P ...
- OWAPSP_ZAP使用
启动OWAPSP_ZAP后 netstat -pantu | grep 8080
- redis做消息列队
#encoding:utf8 import time import redis conn = redis.Redis('localhost',db=1) #连接诶数据库并使用数据库1 def inse ...
- django搭建的站点,通过localhost能访问,但是通过ip不能访问
问题:使用ip访问不了django站点,只能用127.0.0.1访问 解决方法:启动服务时ip使用0.0.0.0 使用gunicorn启动 gunicorn -w4 -b0.0.0.0:8 ...
- stock抓取基本资料
use Goutte\Client; use GuzzleHttp\Client as GuzzleClient; include './vendor/autoload.php'; $client = ...
- codis
总体架构 192.168.199.223(zookeeper.codis-proxy.codis-dashborad:18080.codis-fe:18090.codis-server) 192.16 ...