zoukankan      html  css  js  c++  java
  • [USACO07JAN]平衡的阵容Balanced Lineup

    题目:POJ3264、洛谷P2880。

    题目大意:有一个序列,每次问你一个区间里最大值与最小值的差。

    解题思路:此题是一道RMQ问题,然而我只会线段树啊!于是线段树乱搞。

    然后发现又R又T结果是因为读入优化写错了~~~~(>_<)~~~~

    C++ Code:

    #include<cstdio>
    #include<cctype>
    using namespace std;
    #define C c=getchar()
    #define max(a,b) (((a)>(b))?(a):(b))
    #define min(a,b) (((a)<(b))?(a):(b))
    inline int readint(){
    	char C;
    	bool b=false;
    	while(!isdigit(c))b=c=='-',C;
    	int p=0;
    	while(isdigit(c))p=((p<<3)+(p<<1)+(c^'0')),C;
    	return (b)?-p:p;
    }
    int n,q,L,R,Ansmin,Ansmax;
    int Max[300005],Min[300005];
    void bt(int l,int r,int o){
    	if(l==r){
    		Max[o]=Min[o]=readint();
    		return;
    	}
    	int mid=l+r>>1;
    	bt(l,mid,o<<1);
    	bt(mid+1,r,o<<1|1);
    	Max[o]=max(Max[o<<1],Max[o<<1|1]);
    	Min[o]=min(Min[o<<1],Min[o<<1|1]);
    }
    void query(int l,int r,int o){
    	if(L<=l&&r<=R){
    		Ansmax=max(Ansmax,Max[o]);
    		Ansmin=min(Ansmin,Min[o]);
    		return;
    	}
    	int mid=l+r>>1;
    	if(L<=mid)query(l,mid,o<<1);
    	if(mid<R)query(mid+1,r,o<<1|1);
    }
    int main(){
    	n=readint(),q=readint();
    	bt(1,n,1);
    	while(q--){
    		L=readint(),R=readint();
    		Ansmin=100000000;
    		Ansmax=-Ansmin;
    		query(1,n,1);
    		printf("%d
    ",Ansmax-Ansmin);
    	}
    	return 0;
    }
    
  • 相关阅读:
    中国MOOC分数——Java
    axios的封装和使用
    ModelViewSet里的过滤、排序、分页、序列化设置
    Django和DjangoDRF的区别
    RESTFUL风格
    MVT和MVC的个人理解
    HTTP请求简单理解
    虚拟机创建Django项目并创建APP
    python列表元素添加的几种方法以及差异总结
    python时间格式
  • 原文地址:https://www.cnblogs.com/Mrsrz/p/7389487.html
Copyright © 2011-2022 走看看