zoukankan      html  css  js  c++  java
  • 51NOD 1174 区间中最大的数

    RMQ  

    感觉线段树 也就那样儿

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 10010;
    int s[maxn<<2];
    
    void up(int rt){
        s[rt] = max(s[rt<<1] , s[rt<<1|1]);
    }
    
    void build(int l,int r,int rt){
        if(l == r){
            scanf("%d",&s[rt]);
            return ;
        }
        int mid = (l + r)/2;
        build(l, mid, rt<<1);
        build(mid+1, r, rt<<1|1);
        up(rt);
    }
    
    void add(int i,int j,int l,int r,int rt){ // 对第i位变成j 这个add函数没验证
        if(l == r){
            s[rt] = j;
            return ;
        }
        int mid = (l + r)/2;
        if(i <= mid)
            add(i,j,l,mid,rt<<1);
        if(i > mid)//或者用else 也可以  因为只是i和mid的判断
            add(i,j,mid+1,r,rt<<1|1);
        up(rt);
    }
    
    int query(int L,int R,int l,int r,int rt){
        if(L <= l && r <= R){
            return s[rt];
        }
        int ans = 0;
        int mid = (l + r)/2;
        if(L <= mid)
            ans = max(ans, query(L,R,l,mid,rt<<1));
        if(R > mid)
            ans = max(ans,query(L,R,mid+1,r,rt<<1|1));
        return ans;
    }
    
    int main (){
    
        int n,m;
        scanf("%d", &n);
        build(1,n,1);
        scanf("%d", &m);
        for(int i=1; i <= m;i++){
            int l,r;
            scanf("%d %d",&l,&r);
            printf("%d
    " , query(l+1,r+1,1,n,1));
        }
        return 0;
    }

    等待是最好的成长。

  • 相关阅读:
    awk使用和详解
    Python【map、reduce、filter】内置函数使用说明
    virtualenv -- python虚拟沙盒
    python--threading多线程
    scrapy入门教程
    用两个栈实现队列
    重建二叉树
    从尾到头打印链表
    替换空格
    二维数组的查找
  • 原文地址:https://www.cnblogs.com/Draymonder/p/7327619.html
Copyright © 2011-2022 走看看