线段树模板

关于深度可分离卷积 关于深度学习中的深度可分离卷积 阅读详情

模板(重载运算符部分需要结合具体题目)

const int N = $$;
template <class info> struct SegmentTree
{
    int n;
    vector<info> val;
    SegmentTree(int n_)
    {
        n = n_;
        val.resize(n << 2);
    }
    SegmentTree(int n_, vector<info> &a)
    {
        n = n_;
        val.resize(n << 2);
        function<void(int, int, int)> build = [&](int now, int l, int r) {
            if (l == r)
            {
                val[now] = a[l];
                return;
            }
            int mid = l + (r - l) / 2;
            build(now << 1, l, mid);
            build(now << 1 | 1, mid + 1, r);
            pushup(now);
        };
        build(1, 1, n);
    }
    void pushup(int now)
    {
        val[now] = val[now << 1] + val[now << 1 | 1];
    }
    void update(int now, int l, int r, int pos, const info &v)
    {
        if (l == r)
        {
            val[now] = v;
            return;
        }
        int mid = l + (r - l) / 2;
        if (pos <= mid)
        {
            update(now << 1, l, mid, pos, v);
        }
        else
        {
            update(now << 1 | 1, mid + 1, r, pos, v);
        }
        pushup(now);
    }
    info query(int now, int l, int r, int L, int R)
    {
        if (l > R || r < L)
        {
            return info();
        }
        if (l >= L && r <= R)
        {
            return val[now];
        }
        int mid = l + (r - l) / 2;
        return query(now << 1, l, mid, L, R) + query(now << 1 | 1, mid + 1, r, L, R);
    }
    template <class T> int findfirst(int now, int l, int r, T func)
    {
        if (!func(val[now]))
        {
            return -1;
        }
        if (l == r)
        {
            return l;
        }
        int mid = l + (r - l) / 2;
        int ret = findfirst(now << 1, l, mid, func);
        if (ret == -1)
        {
            ret = findfirst(now << 1 | 1, mid + 1, r, func);
        }
        return ret;
    }
    template <class T> int findlast(int now, int l, int r, T func)
    {
        if (!func(val[now]))
        {
            return -1;
        }
        if (l == r)
        {
            return l;
        }
        int mid = l + (r - l) / 2;
        int ret = findlast(now << 1 | 1, mid + 1, r, func);
        if (ret == -1)
        {
            ret = findlast(now << 1, l, mid, func);
        }
        return ret;
    }
};
struct info
{
    int x = 0;
};
SegmentTree<info> seg(N);
info operator+(const info &a, const info &b)
{
    info ret;
    ret.x = max(a.x, b.x);
    return ret;
}

例题

code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
// #define int ll
const int N = 2E6 + 5;
template <class info> struct SegmentTree
{
    int n;
    vector<info> val;
    SegmentTree(int n_)
    {
        n = n_;
        val.resize(n << 2);
    }
    SegmentTree(int n_, vector<info> &a)
    {
        n = n_;
        val.resize(n << 2);
        function<void(int, int, int)> build = [&](int now, int l, int r) {
            if (l == r)
            {
                val[now] = a[l];
                return;
            }
            int mid = l + (r - l) / 2;
            build(now << 1, l, mid);
            build(now << 1 | 1, mid + 1, r);
            pushup(now);
        };
        build(1, 1, n);
    }
    void pushup(int now)
    {
        val[now] = val[now << 1] + val[now << 1 | 1];
    }
    void update(int now, int l, int r, int pos, const info &v)
    {
        if (l == r)
        {
            val[now] = v;
            return;
        }
        int mid = l + (r - l) / 2;
        if (pos <= mid)
        {
            update(now << 1, l, mid, pos, v);
        }
        else
        {
            update(now << 1 | 1, mid + 1, r, pos, v);
        }
        pushup(now);
    }
    info query(int now, int l, int r, int L, int R)
    {
        if (l > R || r < L)
        {
            return info();
        }
        if (l >= L && r <= R)
        {
            return val[now];
        }
        int mid = l + (r - l) / 2;
        return query(now << 1, l, mid, L, R) + query(now << 1 | 1, mid + 1, r, L, R);
    }
    template <class T> int findfirst(int now, int l, int r, T func)
    {
        if (!func(val[now]))
        {
            return -1;
        }
        if (l == r)
        {
            return l;
        }
        int mid = l + (r - l) / 2;
        int ret = findfirst(now << 1, l, mid, func);
        if (ret == -1)
        {
            ret = findfirst(now << 1 | 1, mid + 1, r, func);
        }
        return ret;
    }
    template <class T> int findlast(int now, int l, int r, T func)
    {
        if (!func(val[now]))
        {
            return -1;
        }
        if (l == r)
        {
            return l;
        }
        int mid = l + (r - l) / 2;
        int ret = findlast(now << 1 | 1, mid + 1, r, func);
        if (ret == -1)
        {
            ret = findlast(now << 1, l, mid, func);
        }
        return ret;
    }
};
struct info
{
    int x = 0;
};
SegmentTree<info> seg(N);
info operator+(const info &a, const info &b)
{
    info ret;
    ret.x = max(a.x, b.x);
    return ret;
}
void solve()
{
    int n;
    cin >> n;
    set<int> s{0, 2 * N};
    seg.update(1, 1, N, 1, {2 * N - 1});
    auto ins = [&](int x) {
        auto it = s.insert(x).first;
        int l = *prev(it);
        int r = *next(it);
        seg.update(1, 1, N, l + 1, {x - l - 1});
        seg.update(1, 1, N, x + 1, {r - x - 1});
    };
    auto del = [&](int x) {
        auto it = s.find(x);
        int l = *prev(it);
        int r = *next(it);
        seg.update(1, 1, N, l + 1, {r - l - 1});
        seg.update(1, 1, N, x + 1, {});
        s.erase(x);
    };
    for (int i = 1; i <= n; i++)
    {
        int x;
        cin >> x;
        ins(x);
    }
    int q;
    cin >> q;
    for (int i = 1; i <= q; i++)
    {
        char op;
        int x;
        cin >> op >> x;
        if (op == '+')
        {
            ins(x);
        }
        else if (op == '-')
        {
            del(x);
        }
        else
        {
            int ans = seg.findfirst(1, 1, N, [&](info &a) { return a.x >= x; });
            cout << ans << " ";
        }
    }
    for (auto x : s)
    {
        seg.update(1, 1, N, x + 1, {});
    }
    cout << "\n";
}
signed main()
{
    ios::sync_with_stdio(false), cin.tie(nullptr);
    int t = 1;
    cin >> t;
    while (t--)
    {
        solve();
    }
}

深度学习论文: AnomalyDINO: Boosting Patch-based Few-shot Anomaly Detection with DINOv2 通过将DINOv2模型适应到一次性和少量异常检测中,并专注于工业应用少量异常检测。实验表明,这种方法不仅与现有技术相匹敌,甚至可以在许多设置中超越它们。我们提出的仅视觉方法AnomalyDINO基于补丁相似性,能够实现图像级别的异常预测和像素级别的异常分割。该方法在方法论上很简单,无需训练,因此不需要任何额外的数据进行微调或元学习。 阅读详情

相关推荐

从解压到编译:手把手带你用TeXstudio搞定第一篇ACM LaTeX论文

本文详细指导如何使用TeXstudio从解压ACM LaTeX模板到成功编译第一篇学术论文的全过程。涵盖环境准备、模板配置、TeXstudio设置及常见问题排查,特别针对ACM会议论文格式要求,帮助学术新人快速掌握LaTeX写作技巧。

weixin_30655569的博客 254

线段树模板(个人)

【代码】线段树模板。

nzdd11的博客 194

STM32F4系列HAL库配置定时器实验——输入捕获

STM32F4系列HAL库配置定时器实验——输入捕获 输入捕获简单讲解 输入捕获模式可以用来测量脉冲宽度或者测量频率。我们以测量周期和频率为例,用一个简图来说明输入捕获的原理 假定定时器工作在向上计数模式, 图中 t1~t2 时间,就是我们需要测量的高电平时间。测量方法如下:首先设置定时器通道 x 为 上升沿捕获,这样,t1 时刻,就会捕获到当前的 CNT 值,然后立即清零 CNT,并设置通道 x为下降沿捕获,这样到 t2 时刻,又会发生捕获事件,得到此时的 CNT 值,记为 CCRx2。这样,根据定时器

azs0504的博客 9285

9.2 线段树详解+模板代码

线段树详解+模板代码

m0_62709362的博客 839

STM32F4实战:手把手教你实现USB OTG双模式切换(Host/Slave)

本文详细介绍了如何在STM32F4上实现USB OTG双模式切换(Host/Slave),包括硬件架构解析、软件实现机制、主机模式下的U盘读写以及从机模式下的自定义设备开发。通过实战案例和优化技巧,帮助开发者快速掌握USB双角色功能,提升嵌入式系统开发的灵活性和效率。

u9v0w的博客 728

python语言下使用opencv接口cv2.VideoCapture()接口调用海康机器人工业相机

文章目录 目录 文章目录 前言 一、opencv接口介绍 二、调用海康机器人工业相机 1.使用海康机器人工业相机的前提 2.调用海康机器人工业相机进行显示 3.调用海康机器人工业相机进行存图 4.调用海康机器人工业相机存视频 5.调用海康机器人工业相机进行简单图像处理 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下.

qq_39570716的博客 1万+

线段树模板代码(无注释)

含区间修改、点修改、区间查询、懒惰标记(lazytag)的区间求和,可通过。

weixin_66707711的博客 304

新手必看!华为S5700交换机健康检查清单:从CPU到日志的完整巡检流程

本文为新手网管人员提供华为S5700交换机的健康检查完整指南,涵盖CPU、内存、温度、日志等核心指标的日常维护流程。通过详细的display命令和实用案例,帮助用户快速掌握设备体检技巧,确保交换机稳定运行。

weixin_29251337的博客 236

【模板】我自己的线段树

自用线段树模板,如果你觉得有用就学习学习吧~

A's World 287

你的小龙虾 OpenClaw 还很笨?快给它装上这几个核心技能(OpenClaw 必装skills整理)

🦞 刚装小龙虾OpenClaw? 本文分享一些OpenClaw必装技能,从视觉理解到智能学习,让它从“会聊天”变“会干活” 🚀

XiaoqiangClub的博客 869

两万字硬核指南!Python爬虫requests库从入门到精通:新手也能搞定所有爬取场景(附实战案例+避坑大全)

请求头是客户端发送给服务器的额外信息,比如User-Agent(浏览器类型)、Referer(来源页面)、Cookie(登录凭证)、(编码方式)等。Cookie是服务器存储在客户端的小型文本文件,包含用户的登录凭证、偏好设置等信息。浏览器会在每次请求时自动携带Cookie,服务器通过Cookie识别用户身份。代理IP是一个中间服务器,你的请求先发送到代理IP,再由代理IP发送到目标网站,目标网站只能看到代理IP的地址,看不到你的真实IP。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1496

线段树 - 模板

线段树板子0: #include<cstdio> #include<iostream> #define ll long long #define _for(i,a,b) for(ll i = (a);i < (b); ++i) using namespace std; const ll maxn = 1e5+5; void build_tree(ll arr[],ll tree[],ll node,ll start,ll end){ //printf("Start : %

Spike的秃头之路 198

【光子 AI 】应用 LangGraph 的核心模型和算法原理,完整实现一个极简版的 Agent 开发框架源代码,并给出具体的应用测试实际项目案例

下面给出一个“极简版 LangGraph 风格 Agent 框架”的完整可运行实现:用 有向图 + 状态(State) + 节点(Node) + 条件路由(Conditional Edge) + 循环(Loop) + Checkpoint 这一套核心模型/算法,把 Agent 组织成可编排、可测试的状态机工作流(这正是 LangGraph 的核心抽象之一:以 StateGraph 组织节点,节点读写共享状态,边做路由与循环,并支持持久化/回放)。 参考概念来源:LangGraph 官方文档对 “StateG

AI天才研究院 267

刘汝佳 线段树模板

一、线段树(点修改) update

远古小山的专栏 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

线段树 模板题 笔记

线段树 模板题 笔记

flyhigh521949的博客 648

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

线段树模板整理

综述线段树的原理:将[1,n]分解成若干特定的子区间(数量不超过4*n),然后,将每个区间[L,R]都分解为少量特定的子区间,通过对这些少量子区间的修改或者统计,来实现快速对[L,R]的修改或者统计。 作用:对编号连续的一些点的区间信息进行修改或者统计操作 主要操作:区间查询、点更新、区间更新 时间复杂度:修改和统计的复杂度都是O(log(N))由原理可以看出线段树维护的信息必须满足区间加法

歪歪T的拿金之路 8120

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

线段树--模板

线段树的命名tree线段树的创建 build线段树的查询 query10月4日的线段树模板(现更新)问题:不够简洁#include&lt;iostream&gt; using namespace std; const int maxind=256; int segTree[maxind*4+10]; int array[maxind]; bool flag=false; inline min(in...

kala0的博客 355

线段树模板1

#include<stdio.h> const int MAXN =2e5+5; typedef long long ll; //次模板一般用于大数据,开long long int numbers[MAXN]; struct node{ int l=0,r=0;//左 右结点 int val=0;//该点的值 }tree[MAXN*4]; // /* 模板大意:对n个数,...

AXKDD6555的博客 457

线段树 模板之求和

本人水平有限,题解不到为处,请多多谅解 本蒟蒻谢谢大家观看 题目: Problem A: 线段树之Sum Time Limit:1 SecMemory Limit:128 MBSubmit:187Solved:130[Submit][Status][Web Board] Description 给定一数列,规定有两种操作,一是修改某个元素,二是...

167

【模板】线段树

【模板】线段树本篇博文只有模板,emmm。 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩。——摘自百度百科 因此,线段树是一种复杂度极为优秀(

Mashiro_ylb的博客 585

线段树模板(对应洛谷一道线段树模板题)

*最近正好在学线段树,搞懂后写一篇博客记录一下模板,供日后自己学习参考*

MrJinNEU的博客 437

线段树模板+习题

线段树自用模板 #include <iostream> using namespace std; const int MAX_N=10010; int s[MAX_N<<2]; void up(int p) { s[p]=s[p<<1]+s[p<<1|1]; } void modify(int p,int ...

atk006680的博客 344
上一篇: 走迷宫C++小游戏
下一篇: 分类回归任务评估指标
LETTER•
博客等级 码龄3年 62粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值