zoukankan      html  css  js  c++  java
  • PKU3264线段树解法

    #include<stdio.h>
    #include
    <string.h>


    struct node
    {
        node 
    * pl, * pr;
        
    int left, right;
        
    int mxa, min;
    }
    mem[100000];

    int memCount;
    int n, q;
    int mxa, min;

    node 
    * newNode()
    {
        node 
    * pt=&mem[memCount++];
        pt
    ->mxa=-1, pt->min=1000001;
        
    return pt;
    }


    node 
    * buildTree(int l, int r)
    {
        node 
    * root=newNode();
        root
    ->left=l;
        root
    ->right=r;
        
    if(r-l>=1)
        
    {
            
    int mid=(l+r)/2;
            root
    ->pl=buildTree(l,mid);
            root
    ->pr=buildTree(mid+1,r);
        }

        
    return root;
    }


    void update(node * root, int i, int a)
    {
        
    if(root->left==&& root->right==i)
        
    {
            root
    ->mxa=a, root->min=a;
            
    return ;
        }

        
    if(root->min>a)
            root
    ->min=a;
        
    if(root->mxa<a)
            root
    ->mxa=a;

        
    if(root->pl->right>=i)
        
    {
            update(root
    ->pl,i,a);
        }
    else
        
    {
            update(root
    ->pr,i,a);
        }

    }


    void que(node * root, int i, int j)
    {
        
    if(root->min>min && root->mxa<mxa)
            
    return;
        
    if(root->left==&& root->right==j)
        
    {
            
    if(mxa<root->mxa)
                mxa
    =root->mxa;
            
    if(min>root->min)
                min
    =root->min;
            
    return;
        }

        
    if(root->pl->right>=i)
        
    {
            
    if(root->pl->right>=j)
                que(root
    ->pl, i, j);
            
    else
            
    {
                
    int mid=(root->left+root->right)/2;
                que(root
    ->pl,i,mid);
                que(root
    ->pr,mid+1,j);
            }

        }
    else
        
    {
            que(root
    ->pr,i,j);
        }

    }


    int main()
    {

        
    while(scanf("%d%d"&n, &q)==2)
        
    {
            memCount
    =0;
            node 
    * root=buildTree(1, n);
            
    int i, a;
            
    for(i=0;i<n;i++)
            
    {
                scanf(
    "%d",&a);
                update(root,i
    +1,a);
            }

            
    int x, y;
            
    for(i=0;i<q;i++)
            
    {
                scanf(
    "%d%d"&x, &y);
                mxa
    =-1, min=1000001;
                que(root,x, y);
                printf(
    "%d\n",mxa-min);
            }

        }

        
    return  0;
    }
  • 相关阅读:
    hadoop(五)scp命令copy文件和配置(完全分布式准备二)|7
    hadoop(四)centos7克隆|静态ip|机器名|映射关系|别名配置(完全分布式准备一)|6
    大数据及hadoop简要概念
    hadoop(三)伪分布模式hdfs文件处理|5
    Hadoop(二) 单节点案例grep和wordcount|4
    centos7 ip/映射/机器名变更/克隆(克隆后配置修改)|2
    centos7 NAT链接配置(静态ip/修改网卡名为eth0)|1
    Hadoop(一) centos7 jdk安装,hadoop安装|3
    hive常用函数五
    hive常用函数四
  • 原文地址:https://www.cnblogs.com/SQL/p/932354.html
Copyright © 2011-2022 走看看