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 }
  • 相关阅读:
    Java-1.2-上机
    java-1.2-homework
    java-1.1-上机
    java-1.1-hello world
    上菜!数据结构实验
    卡比兽Python类和对象
    Python最新答案
    关于专业任意选修课的看法——利用层次分析法教你做出最佳选课方案
    虎牙主播开始上线
    小破财App
  • 原文地址:https://www.cnblogs.com/ttttttttrx/p/10292995.html
Copyright © 2011-2022 走看看