zoukankan      html  css  js  c++  java
  • poj3264 线段树水题

    之前青岛市的一个比赛有题线段树,结果自己实在太二,用线段树去敲没想到自己哪儿错了。。。

    结果今天回来一做一道求最值的水题就发现自己的错误了。。。。导致那场比赛呗虐啊。。。。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int inf =1<<30;
    struct segtree
    {
        int l;
        int r;
        int mid;
        int max;
       // int sum;
        int min;
    }T[600011];
    
    
    int max(int a,int b)
    {
        return a>b?a:b;
    }
    int min(int a,int b)
    {
        return a<b?a:b;
    }
    
    
    void construct(int l,int r,int k)  //二叉树
    {
        T[k].l=l;
        T[k].r=r;
        T[k].mid=(l+r)/2;
        T[k].max=-1;
        T[k].min=inf;
        //T[k].sum=0;
    
    
        if(l==r)    return ;
    
        construct(l,T[k].mid,2*k);
        construct(T[k].mid+1,r,2*k+1);
    }
    
    
    void insert(int n,int d,int k)
    {
        if(T[k].l==T[k].r&&T[k].l==d)   {T[k].max=n;T[k].min=n;return ;}
        //if(T[k].l==T[k].r&&T[k].l==d)   {T[k].sum+=n;return ;}
    
        if(d<=T[k].mid)  insert(n,d,2*k);
        else            insert(n,d,2*k+1);
        {
            T[k].max=max(T[2*k].max,T[2*k+1].max);
            T[k].min=min(T[2*k].min,T[2*k+1].min);
        }
    }
    
    
    int ans;int ans1;
    void search(int l,int r,int k)              //类似深搜
    {
        if(T[k].l==l&&T[k].r==r)    {ans=max(ans,T[k].max);ans1=min(ans1,T[k].min);return ;}
        //if(T[k].l==l&&T[k].r==r)    {ans+=T[k].sum;return ;}
    
        if(r<=T[k].mid)      search(l,r,2*k);
        else if(l>T[k].mid)  search(l,r,2*k+1);
        else
        {
            search(l,T[k].mid,2*k);
            search(T[k].mid+1,r,2*k+1);
        }
    }
    
    
    int main()
    {
        int N,Q;
        cin>>N>>Q;
        construct(1,N,1);
        for(int i=1;i<=N;i++)
        {
            int v;
            scanf("%d",&v);
            insert(v,i,1);
        }
        while(Q--)
        {
            int v,w;
            ans=-1;ans1=inf;
            scanf("%d%d",&v,&w);
            search(v,w,1);
            cout<<ans-ans1<<endl;
        }
        return 0;
    }
    


     

  • 相关阅读:
    php设计模式注册表模式
    zend studio
    java中模仿C++实现条件编译
    javascript去掉字符串空格——转
    领域模型谈实体对象和值对象
    面向对象语言的多分派、单分派、双重分派
    Java中Split函数的用法技巧
    web页面导出到Excel乱码解决
    在web项目中如何使用rdlc报表
    ASP.NET控件10个最有用的属性详解
  • 原文地址:https://www.cnblogs.com/amourjun/p/5134148.html
Copyright © 2011-2022 走看看