zoukankan      html  css  js  c++  java
  • kb-07专题线段树-02--单点修改,区间最值

      1 /*
      2    区间单点该值,区间查询最大值;
      3    hdu-1754
      4  */
      5 #include<iostream>
      6 #include<cstdio>
      7 #include<cstring>
      8 using namespace std;
      9 typedef struct
     10 {
     11     int l,r;
     12     int value;
     13 }V;
     14 int n,m,a[200005]={0},MAX=-1;
     15 V tr[800005]={0};
     16 void build(int i,int l,int r)
     17 {
     18     tr[i].l=l;
     19     tr[i].r=r;
     20     if(l==r)
     21     {
     22         tr[i].value=a[l];
     23         return ;
     24     }
     25     int mid=(l+r)/2;
     26     build(i<<1,l,mid);
     27     build(i<<1|1,mid+1,r);
     28     tr[i].value=max(tr[i<<1].value,tr[i<<1|1].value);
     29 }
     30 void Query(int i,int l,int r)
     31 {
     32     if(tr[i].l==l&&tr[i].r==r)
     33     {
     34         MAX=MAX>=tr[i].value?MAX:tr[i].value;
     35         return ;
     36     }
     37     i=i<<1;
     38     if(l<=tr[i].r)
     39     {
     40         if(r<=tr[i].r)
     41             Query(i,l,r);
     42         else
     43             Query(i,l,tr[i].r);
     44     }
     45     i+=1;
     46     if(r>=tr[i].l)
     47     {
     48         if(l>=tr[i].l)
     49             Query(i,l,r);
     50         else
     51             Query(i,tr[i].l,r);
     52     }
     53 }
     54 void Update(int i,int l,int x)
     55 {
     56     if(tr[i].l==tr[i].r&&tr[i].l==l)
     57     {
     58         tr[i].value=x;
     59         return ;
     60     }
     61     int t=i<<1;
     62     if(l<=tr[t].r)
     63         Update(t,l,x);
     64     t+=1;
     65     if(l>=tr[t].l)
     66         Update(t,l,x);
     67     tr[i].value=max(tr[i<<1].value,tr[i<<1|1].value);
     68 }
     69 int main()
     70 {
     71     while(scanf("%d%d",&n,&m)!=EOF)
     72     {
     73         memset(a,0,sizeof(a));
     74         for(int i=1;i<=n;i++)
     75         {
     76             scanf("%d",&a[i]);
     77         }
     78         build(1,1,n);
     79 /*        for(int i=1;i<11;i++)
     80             printf("I:%d %d
    ",i,tr[i].value);
     81 */        char s;
     82         int x1,x2;
     83         while(m--)
     84         {
     85             getchar();
     86             scanf("%c%d%d",&s,&x1,&x2);
     87             if(s=='Q')
     88             {
     89                 MAX=-1;
     90                 Query(1,x1,x2);
     91                 printf("%d
    ",MAX);
     92             }
     93             else
     94             {
     95                 Update(1,x1,x2);
     96             }
     97         }
     98     }
     99     return 0;
    100 }
  • 相关阅读:
    poj1113--凸包(Andrew)
    php变量内存完全释放
    php的内存分配还是很智能的
    git 忽略权限记录一下
    开启事务处理插入多条数据 速度也可以
    var_dump(is_writeable(ini_get("session.save_path")));
    要注意一下xss攻击啊
    select *," as A from B union ...
    多次踩坑
    js instanceof运算符
  • 原文地址:https://www.cnblogs.com/by-1075324834/p/4541186.html
Copyright © 2011-2022 走看看