zoukankan      html  css  js  c++  java
  • B

      第一次打 改了半天  各种小错误 难受

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 const int maxn=2000000+7;
     5 int a[maxn],n;
     6 struct Node{
     7     int l,r;
     8     long long Max,lazy;
     9     void update(long long  val){
    10         ;//本题没用
    11     }
    12 }tree[maxn*5];
    13 void push_up(int x){
    14     tree[x].Max=max(tree[x<<1].Max,tree[x<<1|1].Max);
    15 }
    16 
    17 void push_down(int x){//本题不用
    18     int lazyval=tree[x].lazy;
    19     if(lazyval){
    20         tree[x<<1].update(lazyval);
    21         tree[x<<1|1].update(lazyval);
    22         tree[x].lazy=0;
    23     }
    24 }
    25 void build(int x,int l,int r){
    26         tree[x].l=l,tree[x].r=r;
    27         tree[x].Max=tree[x].lazy=0;
    28         if(l==r){//建树 初始化叶子
    29             tree[x].Max=a[l];
    30         }
    31         else {//递归建树
    32             int mid=l+r>>1;
    33             build(x<<1,l,mid);
    34             build(x<<1|1,mid+1,r);
    35             push_up(x);
    36         }
    37 }
    38 void  update(int x,int l,int r,long long  val){
    39     int L=tree[x].l,R=tree[x].r;
    40     if(l==L&&R==r&&L==R){tree[x].Max=val;return ;}//单点修改值
    41      if(r<L||l>R)return ;//如果这两个区间没有交集 x的区间就不用修改了
    42          //int mid=L+R>>1;
    43         update(x<<1,l,r,val);//分别修改左右区间
    44         update(x<<1|1,l,r,val);
    45         push_up(x);//更新左右区间
    46 }
    47 
    48 long long query(int x,int l,int r){
    49     int L=tree[x].l,R=tree[x].r;
    50     if(l<=L&&R<=r){return tree[x].Max;}//如果当前节点区间完全被要查询区间包含 直接返回该节点的最大值即可
    51      if(r<L||l>R)return 0;//如果当前区间不在要查询区间里面,返回一个不影响其他查找的最小值 0 (学生分数都是正数)
    52     //     int mid=L+R>>1;
    53          long long ans=0;
    54         ans=max(query(x<<1,l,r),query(x<<1|1,l,r));
    55     return ans;
    56 }
    57 
    58 int main(){
    59 int n,q;
    60 while(scanf("%d%d",&n,&q)==2){
    61     for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    62     build(1,1,n);
    63     char op[10];
    64         int l,r;
    65     for(int i=1;i<=q;i++)
    66     {
    67         scanf("%s%d%d",op,&l,&r);
    68         if(op[0]=='Q'){
    69             //int l,r;
    70             //scanf("%d%d",&l,&r);
    71             printf("%lld
    ",query(1,l,r));
    72         }
    73         else if(op[0]=='U'){
    74             //int l,r;
    75             //scanf("%d%d",&l,&r);
    76             update(1,l,l,r);
    77         }
    78     }
    79 
    80 }
    81     return 0;
    82 }
  • 相关阅读:
    Docker镜像与仓库(四)
    Docker网络与存储(三)
    Docker基本使用(一)
    虚拟化KVM之优化(三)
    修改CENTOS7的网卡ens33修改为eth0
    虚拟化KVM之安装(二)
    虚拟化KVM之概述(一)
    Python不同版本打包程序为.exe文件
    JSON
    同源策略(same-origin policy)及三种跨域方法
  • 原文地址:https://www.cnblogs.com/ttttttttrx/p/10292995.html
Copyright © 2011-2022 走看看