zoukankan      html  css  js  c++  java
  • 算法模板-线段树区间最值

    牛客裸题

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int inf = 0x3f3f3f3f;
    const int maxn = 1e5+5;
    inline int ls(int p){return p<<1;}
    inline int rs(int p){return p<<1|1;}
    int a[maxn];
    int n,q;
    struct node{
    	int l,r;
    	int mx,mi;// 区间最值 
    }t[maxn*4];
    void pushup(int p)
    {
    	t[p].mx = max( t[ls(p)].mx,t[rs(p)].mx );
    	t[p].mi = min( t[ls(p)].mi,t[rs(p)].mi );
    }
    void build(int p,int l,int r)
    {
    	t[p].l = l, t[p].r = r;
    	if( l==r )
    	{
    		t[p].mi = t[p].mx = a[l];
    		return ;
    	}
    	int mid = (l+r)>>1;
    	build(ls(p),l,mid);
    	build(rs(p),mid+1,r);
    	pushup(p);
    }
    // 单点修改 
    void update(int p,int x,int y)
    {
    	if( t[p].l==x && t[p].r==x )
    	{
    		t[p].mi = t[p].mx = y;
    		return ;
    	}
    	int mid = (t[p].l+t[p].r)>>1;
    	if( x<=mid ) update(ls(p),x,y);
    	else update(rs(p),x,y);
    	pushup(p);
    }
    int query_mx(int p,int l,int r)
    {
    	if( l<=t[p].l && t[p].r<=r ) return t[p].mx;
    	int mid = (t[p].l+t[p].r)>>1;
    	int ans = -1e9;
    	if( l<=mid ) ans = max( ans , query_mx(ls(p),l,r) );
    	if( r>=mid+1 ) ans = max( ans,query_mx(rs(p),l,r) );
    	return ans;
    }
    int query_mi(int p,int l,int r)
    {
    	if( l<=t[p].l && t[p].r<=r ) return t[p].mi;
    	int mid = (t[p].l+t[p].r)>>1;
    	int ans = 1e9;
    	if( l<=mid ) ans = min( ans , query_mi(ls(p),l,r) );
    	if( r>=mid+1 ) ans = min( ans,query_mi(rs(p),l,r) );
    	return ans;
    }
    int main()
    {
    	cin>>n>>q;
    	for(int i=1;i<=n;i++) cin>>a[i];
    	build(1,1,n);
    	while(q--)
    	{
    		int op; cin>>op;
    		if( op==1 )
    		{
    			int x,y; cin>>x>>y;
    			update(1,x,y);
    		}
    		else 
    		{
    			int l,r; cin>>l>>r;
    			int ans = query_mx(1,l,r)-query_mi(1,l,r) == r-l;
    			printf("%s
    ",ans?"YES":"NO");
    		}
    	}
    	return 0;
    }
    
    
    
    
  • 相关阅读:
    Python测试框架:pytest
    用Python unittest搭建自动化测试框架
    unittest单元测试框架
    golang获取本地dns服务器
    Go语言HTTP请求头小写问题
    MAC上使用nginx搭建直播服务器
    go packages 学习
    Cloud Native Computing Foundation
    普通文件I/O需要两次复制,内存映射文件mmap一次复制
    page cache & buffer cache
  • 原文地址:https://www.cnblogs.com/xiaoxiao179/p/13617131.html
Copyright © 2011-2022 走看看