• 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;
    }



  • 相关阅读:
    改善深层神经网络
    IO操作 第一篇 学习(转载)
    杂谈:收集的一些博文
    杭电2072
    Java数组常用方法
    JAVA中final修饰符小结
    南阳106
    南阳283
    南阳277
    南阳458
  • 原文地址:https://www.cnblogs.com/Eroad/p/9373477.html
Copyright © 2020-2023  润新知