H题用线段树找最大最小值都为x超内存

线段树找最大最小值都是x,为啥说我超内存了鸭?是递归层数太多了嘛?可是别人***树都行诶
#include"bits/stdc++.h"
#define out(x) cout<<#x<<"="<<x
#define C(n,m) (m>n?0:(long long)fac[(n)]*invf[(m)]%MOD*invf[(n)-(m)]%MOD)
using namespace std;
typedef long long LL;
const int maxn=1e5+5;
const int MOD=20180623;
int Min[maxn<<2],Max[maxn<<2];
void pushup(int id)
{
    Max[id]=max(Max[id<<1],Max[id<<1|1]);
    Min[id]=min(Min[id<<1],Min[id<<1|1]);
}

void Build(int id,int L,int R)
{
    if(L==R)
    {
        scanf("%d",&Min[id]);
        Max[id]=Min[id];
        return ;
    }
    int mid=L+R>>1;
    Build(id<<1,L,mid);
    Build(id<<1|1,mid+1,R);
    pushup(id);
}
int query(int id,int L,int R,int qL,int qR,int x)
{
    if(qL<=L&&qR>=R&&Max[id]==x&&Min[id]==x)
    {
        return R-L+1;
    }
    int mid=L+R>>1;
    int res=0;
    if(L<=qL)res+=query(id<<1,L,mid,qL,qR,x);
    if(R>mid)res+=query(id<<1|1,mid+1,R,qL,qR,x);
    return res;
}
int main()
{
    int N,Q;
    while(cin>>N>>Q)
    {
        Build(1,1,N);
        while(Q--)
        {
            int L1,R1,L2,R2,x;
            scanf("%d%d%d%d%d",&L1,&R1,&L2,&R2,&x);
            LL res1=query(1,1,N,L1,R1,x);
            LL res2=query(1,1,N,L2,R2,x);
            cout<<res1%MOD<<endl<<res2%MOD<<endl<<res1*res2%MOD<<endl;
        }
    }
}

全部评论
要是没找到就死循环了
点赞 回复 分享
发布于 2019-06-15 15:28

相关推荐

05-24 14:12
门头沟学院 Java
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务