ccnu-线段树联系-单点更新2-B
代码如下:
#include<iostream>
#include<string>
#include<cstdio> #define Max 200005
#define INF -1
using namespace std;
struct BTm
{
int elem;
int r;
int l;
}; BTm an[Max<<3];
int stu[Max];
int max(int a,int b)
{
return a>b?a:b;
}
void init(int i,int j, int k)
{
an[k].r = j;
an[k].l = i;
if(i == j)
{
an[k].elem = stu[i];
// printf("z\n");
return ;
}
int m=(i+j)>>1;
init(i,m,k<<1);
init(m+1,j,k<<1|1);
an[k].elem = max(an[k<<1].elem , an[k<<1|1].elem); } void update(int index,int change,int k)
{
int r,l;
r = an[k].r;
l = an[k].l;
if(r == l) {an[k].elem = change; return ;}
int m = (r+l)>>1; if(index <= m)
update(index,change,k<<1);
else
update(index,change,k<<1|1);
an[k].elem = max(an[k<<1].elem ,an[k<<1|1].elem);
}
int query(int lstu,int rstu,int k)
{
int l = an[k].l;
int r = an[k].r;
if(lstu == l&&rstu == r)
{
return an[k].elem;
}
int ans = -1;
int m = (l + r)>>1;
if(rstu <= m)
{
ans = max(query(lstu,rstu,k<<1),ans);
}
else if(m < lstu)
{
ans = max(query(lstu,rstu,k<<1|1),ans);
}
else
{
ans = max(ans,max(query(lstu,m,k<<1),query(m+1,rstu,k<<1|1)));
}
return ans;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m) != EOF)
{
for(int i = 1; i <= n; i++)
scanf("%d",&stu[i]);
init(1,n,1);
while(m--)
{
string s;
cin>>s;
if(s == "Q")
{
int A,B;
scanf("%d%d",&A,&B);
printf("%d\n",query(A,B,1));
}
else
{
int A,B;
scanf("%d%d",&A,&B);
update(A,B,1);
}
} }
return 0;
}
【位运算符一定是可耐的男孩纸!*^*】
ccnu-线段树联系-单点更新2-B的更多相关文章
- hdu1754线段树的单点更新区间查询
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDUOJ---1754 I Hate It (线段树之单点更新查区间最大值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 5475 An easy problem(暴力 || 线段树区间单点更新)
http://acm.hdu.edu.cn/showproblem.php?pid=5475 An easy problem Time Limit: 8000/5000 MS (Java/Others ...
- 线段树(单点更新)HDU1166、HDU1742
在上一篇博文里面,我提到了我不会线段树,现在就努力地学习啊! 今天AC一题感觉都很累,可能是状态不佳,在做HDU1166这题目时候,RE了无数次. 原因是:我的宏定义写错了,我已经不是第一犯这种错误了 ...
- POJ 2892 Tunnel Warfare || HDU 1540(树状数组+二分 || 线段树的单点更新+区间查询)
点我看题目 题意 :N个村子连成一条线,相邻的村子都有直接的地道进行相连,不相连的都由地道间接相连,三个命令,D x,表示x村庄被摧毁,R ,表示最后被摧毁的村庄已经重建了,Q x表示,与x直接或间 ...
- HDU 1394 Minimum Inversion Number(线段树的单点更新)
点我看题目 题意 :给你一个数列,a1,a2,a3,a4.......an,然后可以求出逆序数,再把a1放到an后,可以得到一个新的逆序数,再把a2放到a1后边,,,,,,,依次下去,输出最小的那个逆 ...
- 线段树(单点更新and成段更新)
线段树需要的空间. 区间为1-->n 假设是一棵完全二叉树,且树高为i. 完全二叉树性质:第i层最多有2^(i-1)个结点. 那么 2^(i-1) = n; i = log2(n) + ...
- HDU 1754 I Hate It(线段树之单点更新 区间最值查询)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- POJ 3171.Cleaning Shifts-区间覆盖最小花费-dp+线段树优化(单点更新、区间查询最值)
Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4721 Accepted: 1593 D ...
- Almost Regular Bracket Sequence CodeForces - 1095E (线段树,单点更新,区间查询维护括号序列)
Almost Regular Bracket Sequence CodeForces - 1095E You are given a bracket sequence ss consisting of ...
随机推荐
- 浅析Java反射机制
目前,在项目中使用Java反射机制(除Spring框架)的地方不多,但为后续准备,简单将最近的反射体会总结如下: 1. 按光学中的反射,可以将java中的反射理解为“镜像”.有以下用途: Java反射 ...
- Portlet之讲解
Portlet在Web门户上管理和显示的可插拔的用户界面组件.Portlet产生可以聚合到门户页面中的标记语言代码的片段,如HTML,XML等.通常,根据桌面隐喻,一个门户页面显示为一组互相不重叠的p ...
- PowerDesigner(九)-模型文档编辑器(生成项目文档)(转)
模型文档编辑器 PowerDesigner的模型文档(Model Report)是基于模型的,面向项目的概览文档,提供了灵活,丰富的模型文档编辑界面,实现了设计,修改和输出模型文档的全过程. 模型文 ...
- Working with LOBs in Oracle and PHP
原文链接:http://www.oracle.com/technetwork/articles/fuecks-lobs-095315.html Working with LOBs in Oracle ...
- DirectShow 最简单的入门 -- 播放一段视频
#include <dshow.h> #pragma comment(lib,"strmbase.lib") #pragma comment(lib,"qua ...
- 从maya导入物体 Importing Objects From Maya
原地址:http://game.ceeger.com/Manual/HOWTO-ImportObjectMaya.html Unity natively imports Maya files. To ...
- DotNetBar之SupergridControl显示图片,行距自动调整
DotNetBar第三方控件SupergridControl中显示图片 1.设置SuperGridControl: SuperGridControl的GridColumn的EditorType设置为: ...
- POJ 1006 Biorhythms (中国剩余定理)
在POJ上有译文(原文右上角),选择语言:简体中文 求解同余方程组:x=ai(mod mi) i=1~r, m1,m2,...,mr互质利用中国剩余定理令M=m1*m2*...*mr,Mi=M/mi因 ...
- $("#id a") - $("#id .c a") = ?
前沿 这是之前淘宝的一道面试题,题目借用了 jQuery 选择器的语法.大概的意思是,从 #id 元素内选出所有不是 .c 后代的 a 元素,即父元素 #id 内的所有后代元素中,选出不是 .c 后代 ...
- ==和equals的区别
== :是判断两个变量或实例是不是指向同一个内存空间equals :是判断两个变量或实例所指向的内存空间的值是不是相同 结论:欲比较栈中数据是否相等,请用= =:欲比较堆中数据是否相等,请用equal ...