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;
    }
    


     

  • 相关阅读:
    golang基础--控制语句
    django restful framework 一对多方向更新数据库
    C# 一句很简单而又很经典的代码
    2D图形如何运动模拟出3D效果
    C# 通俗说 委托(和事件)
    C# 定积分求周长&面积原理 代码实现
    Unity 消息发送机制 解析
    Unreal 读书笔记 (二) 类对象的设计
    Unreal 读书笔记 (一) 五个常见基类
    Unreal TEXT FText,FName,FString 浅谈
  • 原文地址:https://www.cnblogs.com/amourjun/p/5134148.html
Copyright © 2011-2022 走看看