Balanced Lineup poj 3264

也可以用st表做

但st表不支持动态更新

数据结构码得还是太少,本废物给您表演一个花式手抖

数据大注意scanf;

---

复制代码
#include <iostream>
#include <math.h>
#include <string.h>
#include <vector>
#include <map>
#include <queue>
#include <stdio.h>
#include <algorithm>
#include <cstdio>
using namespace std;
int maxn[200007],minn[200007];
void update(int root,int v,int p,int l,int r)
{
    if(l==r)
     {
         maxn[root]=max(maxn[root],v);
         minn[root]=min(minn[root],v);
         return ;
     }
     int mid=(l+r)>>1;
     
     if(p<=mid)
     {
         update(root<<1,v,p,l,mid);
     }
     if(p>mid)
     {
         update(root*2+1,v,p,mid+1,r);
     }
     maxn[root]=max(maxn[root<<1],maxn[root*2+1]);
     minn[root]=min(minn[root<<1],minn[root*2+1]);
}
int  query1(int root,int l,int r,int ql,int qr)
{  
  //  if(l==r) return maxn[root];
    if(l>qr||r<ql) return 0;

    if(l>=ql&&r<=qr)
    {
        return maxn[root];
    }
    int mid=(l+r)>>1,ans=-1;
    if(ql<=mid)
    {
        ans=max(ans,query1(root<<1,l,mid,ql,qr));
    }
    if(qr>mid)
    {
        ans=max(ans,query1(root*2+1,mid+1,r,ql,qr));
    }
    return ans;
}
int  query2(int root,int l,int r,int ql,int qr)
{
     if(l>qr||r<ql) return (1<<27);

    if(l>=ql&&r<=qr)
    {
        return minn[root];
    }
    int mid=(l+r)>>1,ans=1<<27;
    if(ql<=mid)
    {
        ans=min(ans,query2(root<<1,l,mid,ql,qr));
    }
    if(qr>mid)
    {
        ans=min(ans,query2(root*2+1,mid+1,r,ql,qr));
    }
    return ans;
}
int main()
{
    

//    freopen("lys.in","r",stdin);
    memset(maxn,0,sizeof(maxn));
    memset(minn,0x3f,sizeof(minn));
    
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int a;
        scanf("%d",&a);
        update(1,a,i,1,n);
    }
    for(int i=1;i<=m;i++)
    {
        int ql,qr;
        scanf("%d%d",&ql,&qr);
        printf("%d\n",query1(1,1,n,ql,qr)-query2(1,1,n,ql,qr));
    }
}
复制代码

 

posted @   liyishui  阅读(24)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示