美文网首页
week18-22 RMQ

week18-22 RMQ

作者: vaisy | 来源:发表于2017-04-06 09:36 被阅读0次

week18参见week16 对修改和查询操作做了平衡;
看了下十佳 都拿暴力过了握草。。。???
那我还平衡啥。。。
week19加入了线段树
因为week18的数据量是104,week19到了106了。
它是减少了区间数因为RMQ是按照满二叉树遍历嘛
但是我T了个爽。。。
千万不要用cin啊啊啊!!!

#include<iostream>
#include<cmath>
#include<limits.h>
#include<stdio.h>
using namespace std;
#define MAXN 1000009
#define rson m+1,r,rt<<1|1
#define lson l,m,rt<<1
int w[MAXN],ans[4*MAXN];
void pushup(int rt)
{
    ans[rt]=min(ans[rt<<1],ans[rt<<1|1]);//取最小值
}
void build(int l,int r,int rt=1)
{
    if(l==r)
    {
        ans[rt]=w[l];
        return ;
    }
    int m=(l+r)>>1;
    build(lson);
    build(rson);
    pushup(rt);//用子节点计算父节点
}
int query(int L,int R,int l,int r,int rt=1)
{
    if(L<=l&&r<=R) return ans[rt];//如果查询区间与当前区间相同
    int m=(l+r)>>1,ret=INT_MAX;//分解询问区间
    if(L<=m) ret=min(query(L,R,lson),ret);
    if(m<R) ret=min(query(L,R,rson),ret);
    return ret;
}
void update(int L,int c,int l,int r,int rt=1)//最值的update
{
    if(L==l&&l==r)//到达更新位置
    {
        ans[rt]=c;
        return ;
    }//返回后再更新父节点
    int m=(l+r)>>1;
    if(L<=m) update(L,c,lson);
    else update(L,c,rson);
    pushup(rt);
}
int main()
{
    int i,n,m,op,x,y;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&w[i]);
    scanf("%d",&m);
    build(1,n);
    while(m--)
    {
        scanf("%d%d%d",&op,&x,&y);
        if(op==0) printf("%d\n",query(x,y,1,n));
        else update(x,y,1,n);
    }
    return 0;
}

week20线段树区间修改-加入懒惰
思路同上题。但是呢举个栗子 区间分解下来之后加lazy tag
查询时如果遭遇lazy tag再继续修改
然后这题数据太小暴力也能过就不看了
week21区间离散化预处理
我先去上课了回来就敲
week22回顾week20,解决懒惰标记的互相覆盖


Paste_Image.png

今天能把21和22敲出来就很感人了

相关文章

  • week18-22 RMQ

    week18参见week16 对修改和查询操作做了平衡;看了下十佳 都拿暴力过了握草。。。???那我还平衡啥。。。...

  • RMQ

    优化可以存log2(N),pow(2,n)可以用<< 来实现

  • 区间---RMQ区间最值查询

    RMQ区间最值查询,对于长度为n的数组A[]。RMQ(i,j),返回数组A区间[i , j]内的最大值或最小值。 ...

  • RMQ问题

    RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RM...

  • RMQ—ST

    原题链接[https://www.acwing.com/problem/content/1272/] 在RMQ问题...

  • rocket mq通讯模型源码分析

    该章节主要深入分析rmq是如何构建自己的通讯模型的,主要从以下四点分析: 1、总概论述 2、rmq的通讯协议实现。...

  • Fenwick Tree/B.I.T树状数组算法

    树状数组适用范围:给定区间,求最值,求和,区间单点修改。与RMQ不同的是,RMQ一般只用作区间求最值。但在最值方面...

  • RMQ-ST表

    以前学RMQ的时候完全不懂,最近写到了类似的题,在看了几篇博客,加上以前整理的笔记,才加深了对RMQ算法的理解。R...

  • RabbitMQ学习(四)可靠性投递和confirm机制

    RMQ可靠性投递 一.什么是RMQ的可靠性投递 1.保障消息的成功发出2.保障MQ节点的成功接收3.发送端收到MQ...

  • RocketMQ与Kafka对比(18项差异)

    转自:https://github.com/alibaba/RocketMQ/wiki/rmq_vs_kafka ...

网友评论

      本文标题:week18-22 RMQ

      本文链接:https://www.haomeiwen.com/subject/onxdottx.html