Mosaic HDU - 4819

本文详细介绍了二维线段树的概念及其实现原理,并提供了一段完整的C++代码示例。通过对大区域进行细分,实现对二维空间的有效管理和查询。特别适用于解决涉及区间更新和查询的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击打开链接

二维线段树模板题 二维与一维线段树都是一个道理 即把大的区域或区间分成更小的部分 难在理解二维中大区域和小区域之间的关系

可以当作树套树来想 二维中每个小区间都代表一棵一维线段树 确定二维中每一个小区间就是确定了一个区域有哪些行 再确定对应一维线段树中某个区间 就是确定了一个区域有哪些列

 

#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 0x3f3f3f3f

int minn[4010][4010],maxx[4010][4010];
int n,minnn,maxxx;

void pushupy(int curx,int cury)
{
    minn[curx][cury]=min(minn[curx][cury*2],minn[curx][cury*2+1]);
    maxx[curx][cury]=max(maxx[curx][cury*2],maxx[curx][cury*2+1]);
    return;
}

void pushupxI(int l,int r,int curx,int cury)
{
    int m;
    minn[curx][cury]=min(minn[curx*2][cury],minn[curx*2+1][cury]);
    maxx[curx][cury]=max(maxx[curx*2][cury],maxx[curx*2+1][cury]);
    if(l==r) return;
    m=(l+r)/2;
    pushupxI(l,m,curx,cury*2);
    pushupxI(m+1,r,curx,cury*2+1);
    return;
}

void pushupxII(int tary,int l,int r,int curx,int cury)
{
    int m;
    minn[curx][cury]=min(minn[curx*2][cury],minn[curx*2+1][cury]);
    maxx[curx][cury]=max(maxx[curx*2][cury],maxx[curx*2+1][cury]);
    if(l==r) return;
    m=(l+r)/2;
    if(tary<=m) pushupxII(tary,l,m,curx,cury*2);
    else pushupxII(tary,m+1,r,curx,cury*2+1);
    return;
}

void buildy(int l,int r,int curx,int cury)
{
    int m,t;
    if(l==r)
    {
        scanf("%d",&t);
        minn[curx][cury]=t;
        maxx[curx][cury]=t;
        return;
    }
    m=(l+r)/2;
    buildy(l,m,curx,cury*2);
    buildy(m+1,r,curx,cury*2+1);
    pushupy(curx,cury);
    return;
}

void buildx(int l,int r,int curx)
{
    int m;
    if(l==r)
    {
        buildy(1,n,curx,1);
        return;
    }
    m=(l+r)/2;
    buildx(l,m,curx*2);
    buildx(m+1,r,curx*2+1);
    pushupxI(1,n,curx,1);
    return;
}

void queryy(int yl,int yr,int l,int r,int curx,int cury)
{
    int m;
    if(yl<=l&&r<=yr)
    {
        minnn=min(minnn,minn[curx][cury]);
        maxxx=max(maxxx,maxx[curx][cury]);
        return;
    }
    m=(l+r)/2;
    if(yl<=m) queryy(yl,yr,l,m,curx,cury*2);
    if(yr>=m+1) queryy(yl,yr,m+1,r,curx,cury*2+1);
    return;
}

void queryx(int xl,int xr,int yl,int yr,int l,int r,int curx)
{
    int m,res;
    if(xl<=l&&r<=xr)
    {
        queryy(yl,yr,1,n,curx,1);
        return;
    }
    m=(l+r)/2;
    if(xl<=m) queryx(xl,xr,yl,yr,l,m,curx*2);
    if(xr>=m+1) queryx(xl,xr,yl,yr,m+1,r,curx*2+1);
    return;
}

void updatey(int tary,int val,int l,int r,int curx,int cury)
{
    int m;
    if(l==r)
    {
        minn[curx][cury]=val;
        maxx[curx][cury]=val;
        return;
    }
    m=(l+r)/2;
    if(tary<=m) updatey(tary,val,l,m,curx,cury*2);
    else updatey(tary,val,m+1,r,curx,cury*2+1);
    pushupy(curx,cury);
    return;
}

void updatex(int tarx,int tary,int val,int l,int r,int curx)
{
    int m;
    if(l==r)
    {
        updatey(tary,val,1,n,curx,1);
        return;
    }
    m=(l+r)/2;
    if(tarx<=m) updatex(tarx,tary,val,l,m,curx*2);
    else updatex(tarx,tary,val,m+1,r,curx*2+1);
    pushupxII(tary,1,n,curx,1);
    return;
}

int main()
{
    int t,cas,i,j,q,x,y,l,val;
    scanf("%d",&t);
    for(cas=1;cas<=t;cas++)
    {
        scanf("%d",&n);
        for(i=1;i<=4*n;i++)
        {
            for(j=1;j<=4*n;j++)
            {
                minn[i][j]=N;
                maxx[i][j]=-N;
            }
        }
        buildx(1,n,1);
        scanf("%d",&q);
        printf("Case #%d:\n",cas);
        while(q--)
        {
            scanf("%d%d%d",&x,&y,&l);
            minnn=N,maxxx=-N;
            queryx(max(1,x-l/2),min(n,x+l/2),max(1,y-l/2),min(n,y+l/2),1,n,1);
            val=(minnn+maxxx)/2;
            updatex(x,y,val,1,n,1);
            printf("%d\n",val);
        }
    }
    return 0;
}

 

 

 

 

### YOLOv8 Mosaic-9 数据增强配置和使用方法 Mosaic 是一种广泛应用于目标检测的数据增强技术,它通过将多张图片拼接成一张大图来进行训练,从而增加模型对不同背景和尺度变化的鲁棒性。YOLOv8 支持扩展版的 Mosaic 增强——即 **Mosaic-9** 技术,该技术进一步提升了数据多样性。 #### 配置方式 在 YOLOv8 中,可以通过修改 `data.yaml` 或者默认配置文件 `/root/ultralytics/ultralytics/cfg/default.yaml` 来启用并调整 Mosaic-9 参数[^2]。具体来说: 1. 打开配置文件,默认路径位于 `/root/ultralytics/ultralytics/cfg/default.yaml`。 2. 查找与数据增强相关的部分,通常会有一个名为 `mosaic` 的字段用于控制是否开启此功能以及其变体形式(如 Mosaic-9)。如果未找到,则可以在代码中手动设置。 以下是可能涉及的关键参数及其含义: - `mosaic`: 控制是否启用标准 Mosaic 增强[^1]。 - `mixup`: 另一种混合增强技术,可与 Mosaic 结合使用。 - 自定义增强库(如 Albumentations)支持更高级的功能,例如实现 Mosaic-9 特定逻辑[^1]。 #### 使用方法 为了激活 Mosaic-9,在实际项目中可通过以下两种方式进行操作: ##### 方法一:直接修改 YAML 文件 编辑 `default.yaml` 文件,添加或更新相关字段以适配 Mosaic-9 设置。例如: ```yaml augment: true # 启用数据增强 mosaic: 0.9 # 调整概率至接近于完全应用的状态 rect: false # 关闭矩形训练模式以便兼容更多样化的输入尺寸 ``` 注意:虽然官方文档并未明确提及如何单独指定 “Mosaic-9”,但通过适当调高 `mosaic` 概率值即可间接达到类似效果。 ##### 方法二:编程接口动态设定 利用 Python API 创建自定义脚本完成相同目的。下面展示了一个简单例子说明如何加载预设模型并通过命令行传递额外选项启动训练过程[^3]: ```python from ultralytics import YOLO if __name__ == '__main__': # 加载基础架构实例 model = YOLO("yolov8s.yaml") # 开始训练流程的同时显式声明增强策略 model.train( data="path/to/custom/dataset.yaml", epochs=100, batch=16, mosaic=0.9, # 提升到近似九宫格水平的概率分布 mixup=0.5 # 添加其他辅助手段优化整体表现力 ) ``` 以上代码片段展示了如何灵活运用超参调节机制满足特定需求场景下的性能追求。 --- ### 总结 综上所述,无论是借助现有的全局配置还是即时编写专属逻辑都能轻松达成期望成果—即充分利用 YOLOv8 内置优势特性之一:“Mosaic-9”。只需合理规划好各项指标权重分配便能有效促进最终识别精度提升!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值