• POJ3264 线段树模板


    原题链接:POJ3264

    解析:我拿本题来熟悉线段树模板的,这个应该算是裸题了。

    代码示例:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int INF = 2e9;
    int minV = INF;
    int maxV = -INF;
    struct CNode{
    	int l,r;
    	int minv,maxv;
    	int Mid(){
    		return (l+r)/2;
    	}
    }tree[800020];
    void BuildTree(int root,int l,int r){
    	tree[root].l = l;
    	tree[root].r = r;
    	tree[root].minv = INF;
    	tree[root].maxv = -INF;
    	if(l != r){
    		BuildTree(2*root+1,l,(l+r)/2);
    		BuildTree(2*root+2,(l+r)/2+1,r);
    	}
    	return;
    }
    void Insert(int root,int i,int v){
    	if(tree[root].l == tree[root].r){
    		tree[root].minv = tree[root].maxv = v;
    		return;
    	}
    	tree[root].minv = min(tree[root].minv,v);
    	tree[root].maxv = max(tree[root].maxv,v);
    		if(tree[root].Mid() >= i)
    			Insert(2*root+1,i,v);
    		else Insert(2*root+2,i,v);
    }
    void Query(int root,int s,int e){
    	if(tree[root].minv >= minV && tree[root].maxv <= maxV)
    		return;
    	if(tree[root].l == s && tree[root].r == e){
    		minV = min(minV,tree[root].minv);
    		maxV = max(maxV,tree[root].maxv);
    		return;
    	}
    	if(e <= tree[root].Mid())	Query(2*root+1,s,e);
    	else if(s > tree[root].Mid())	Query(2*root+2,s,e);
    	else{
    		Query(2*root+1,s,tree[root].Mid());
    		Query(2*root+2,tree[root].Mid()+1,e); 
    	}
    }
    int main(){
    	int n,q,h;
    	scanf("%d%d",&n,&q);
    	BuildTree(0,1,n);
    	for(int i = 1;i <= n;i++){
    		scanf("%d",&h);
    		Insert(0,i,h);
    	}	
    	int s,e;
    	for(int i = 0;i < q;i++){
    		minV = INF;
    		maxV = -INF;
    		scanf("%d%d",&s,&e);
    		Query(0,s,e);
    		printf("%d
    ",maxV-minV);
    	}
    	return 0;
    }
  • 相关阅读:
    Git版本控制使用方法入门教程
    github 与git 使用 及配置
    IOS ASI http 框架详解
    block 理解及 简单回调
    IOS在Xcode 4.x以上如何 创建 和 添加 静态库
    dispatch queues GCD
    理解UIApplication(转)
    android 标签对应的代码怎么写alignParentRight、marginRight
    Android 资源文件的命名规范问题
    输入法弹出,屏幕自动适应
  • 原文地址:https://www.cnblogs.com/long98/p/10352198.html
Copyright © 2020-2023  润新知