hdu 1754(I hate it) 线段树

来源:互联网 发布:python 打开txt文件 编辑:程序博客网 时间:2024/05/22 10:50

题目链接:点击打开链接

题目分析:非常好的模板题,适合入门,操作包括,区间询问,区间更改。需要注意的是数组的大小

相关链接学习:点击打开链接


#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;#define maxn 200005#define infint n,m,a,b,c=0;int MAX[maxn<<2];void build(int l,int r,int rt){    if(l==r) {scanf("%d",&MAX[rt]);return;}    int m=(r+l)/2;    build(l,m,rt<<1);    build(m+1,r,rt<<1|1);    MAX[rt] = max(MAX[rt<<1] , MAX[rt<<1|1]);}void update(int rt, int l,int r){    int m=(r+l)/2;    if(l==r) {MAX[rt]=b;return;}    if(a<=m) update(rt<<1,l,m);    else update(rt<<1|1,m+1,r);    MAX[rt]=max(MAX[rt<<1] , MAX[rt<<1|1]);}int query(int rt,int l,int r){       int m=(l+r)/2,ans=0;    if(a<=l&&r<=b) return MAX[rt];    if(a<=m) ans=max(ans,query(rt<<1,l,m));    if(m<b)  ans=max(ans,query(rt<<1|1,m+1,r));    return ans;}int main(){   freopen("in.txt","r",stdin);   freopen("out.txt","w",stdout);    int i,j;    char q[5];    while(~scanf("%d%d",&n,&m))    {        build(1,n,1);        while(m--)        {            scanf("%s%d%d",q,&a,&b);            if(q[0]=='Q') printf("%d\n",query(1,1,n));            else update(1,1,n);        }    }    return 0;}


原创粉丝点击