zoukankan      html  css  js  c++  java
  • bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队【st表||线段树】

    要求区间取min和max,可以用st表或线段树维护
    st表

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int N=100005;
    int n,q,b[N],mn[N][20],mx[N][20];
    int read()
    {
    	int r=0,f=1;
    	char p=getchar();
    	while(p>'9'||p<'0')
    	{
    		if(p=='-')
    			f=-1;
    		p=getchar();
    	}
    	while(p>='0'&&p<='9')
    	{
    		r=r*10+p-48;
    		p=getchar();
    	}
    	return r*f;
    }
    int maxx(int l,int r)
    {
    	int k=b[r-l+1];
    	return max(mx[l][k],mx[r-(1<<k)+1][k]);
    }
    int minn(int l,int r)
    {
    	int k=b[r-l+1];
    	return min(mn[l][k],mn[r-(1<<k)+1][k]);
    }
    int main()
    {
    	n=read(),q=read();
        for(int i=1;i<=n;i++)
    		mn[i][0]=mx[i][0]=read();
    	for(int i=2;i<=n;i++)
    		b[i]=b[i>>1]+1;
    	for(int j=1;(1<<j)<=n;j++)
    		for(int i=1;i<=n;i++)
    			mn[i][j]=min(mn[i][j-1],mn[i+(1<<(j-1))][j-1]);
    	for(int j=1;(1<<j)<=n;j++)
    		for(int i=1;i<=n;i++)
    			mx[i][j]=max(mx[i][j-1],mx[i+(1<<(j-1))][j-1]);
        while(q--)
        {
            int x=read(),y=read();
            printf("%d
    ",maxx(x,y)-minn(x,y));
        }
        return 0;
    } 
    

    线段树

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int N=100005;
    int n,q,a[N];
    struct tree
    {
        int l,r,mi,ma;
    }t[N<<1];
    int read()
    {
        int r=0,f=1;
        char p=getchar();
        while(p>'9'||p<'0')
        {
            if(p=='-')
                f=-1;
            p=getchar();
        }
        while(p>='0'&&p<='9')
        {
            r=r*10+p-48;
            p=getchar();
        }
        return r*f;
    }
    void build(int ro,int l,int r)
    {
        t[ro].l=l,t[ro].r=r;
        if(l==r)
        {
            t[ro].mi=a[l];
            t[ro].ma=a[l];
        }
        else
        {
            int mid=(l+r)>>1;
            build(ro<<1,l,mid);
            build(ro<<1|1,mid+1,r);
            t[ro].ma=max(t[ro<<1].ma,t[ro<<1|1].ma);
            t[ro].mi=min(t[ro<<1].mi,t[ro<<1|1].mi);
        }
    }
    int maxx(int ro,int l,int r)
    {
        if(t[ro].l==l&&t[ro].r==r)
            return t[ro].ma;
        int mid=(t[ro].l+t[ro].r)>>1;
        if(r<=mid)
            return maxx(ro<<1,l,r);
        else if(l>mid)
            return maxx(ro<<1|1,l,r);
        else
            return max(maxx(ro<<1,l,mid),maxx(ro<<1|1,mid+1,r));
    }
    int minn(int ro,int l,int r)
    {
        if(t[ro].l==l&&t[ro].r==r)
            return t[ro].mi;
        int mid=(t[ro].l+t[ro].r)>>1;
        if(r<=mid)
            return minn(ro<<1,l,r);
        else if(l>mid)
            return minn(ro<<1|1,l,r);
        else
            return min(minn(ro<<1,l,mid),minn(ro<<1|1,mid+1,r));
    }
    int main()
    {
        n=read(),q=read();
        for(int i=1;i<=n;i++)
            a[i]=read();
        build(1,1,n);
        while(q--)
        {
            int x=read(),y=read();
            printf("%d
    ",maxx(1,x,y)-minn(1,x,y));
        }
        return 0;
    } 
    
  • 相关阅读:
    发现个atan2的正确使用方式
    Forward+ Shading架构
    fatal: unable to connect to gitee.com: gitee.com[0: 180.97.125.228]: errno=Unknown error 解决方案
    HDFS HA(高可用性)集群规划
    如何使用RTP引擎对语音编码进行转码
    关于 Angular 应用 tsconfig.json 中的 target 属性
    浅谈 Orbeon form builder 的权限控制
    关于 Angular 应用 tsconfig.json 中的 lib 属性
    orbeon form 通过 url 的方式同第三方应用集成的开发明细
    orbeon form 的配置介绍
  • 原文地址:https://www.cnblogs.com/lokiii/p/8939331.html
Copyright © 2011-2022 走看看