zoukankan      html  css  js  c++  java
  • RMQ问题 [luogu 3865]

    原题地址

    ST表模板题,尝试用单点修改线段树。

    原本以为线段树会被卡掉,但是还是险过了。实践证明,快速读入很有用。

    #include<bits/stdc++.h>
    using namespace std;
    
    inline void read(int &ans) {
        int x=0,f=1; char ch=getchar();
        for(;ch<'0'||ch>'9';ch=getchar()) if(ch=='-') f=-1;
        for(;ch>='0'&&ch<='9';x=(x<<3)+(x<<1)+(ch^48),ch=getchar());
    	ans=x*f;
    }
    
    int n,m,maxv[400005];//线段树开4倍空间
    int p1,p2;
    int query(int o, int l, int r)
    {
    	int m=(l+r)>>1, ans = 0;
    	if(p1 <= l && r <= p2) return maxv[o];
    	if(p1 <= m) ans = max(ans, query(o*2, l, m));
    	if(p2 > m) ans = max(ans, query(o*2+1, m+1, r));
    	return ans;
    }
    
    int p,v;//a[p]=v 
    void update(int o,int l,int r){
    	int m=(l+r)>>1;
    	if(l==r) maxv[o]=v;
    	else{
    		if(p<=m)update(o*2,l,m);
    		else update(o*2+1,m+1,r);
    		maxv[o]=max(maxv[o*2],maxv[o*2+1]);
    	}
    }
    
    int main(){
    	int k;
    	read(n),read(m);
    	for(int i=1;i<=n;i++)
    	{
    		read(k);
    		p=i, v=k;
    		update(1,1,n);
    	}
    	while(m--){
    		read(p1),read(p2);
    		printf("%d
    ",query(1,1,n));
    	}
    	return 0;
    }



  • 相关阅读:
    基础知识概要
    文件操作
    排序
    python 内置函数
    lambda表达式
    函数
    字典dict
    Session、Cookie 学习笔记
    Spring+MVC+Mybatis整合
    JSONP原理解析
  • 原文地址:https://www.cnblogs.com/Eroad/p/9373477.html
Copyright © 2011-2022 走看看