UVA - 11235 RMQ

本文介绍了解决UVA-11235问题的方法,该问题要求找出非降序整数数组中指定区间内出现最频繁的数值的频率。通过游程编码简化输入数组,并使用RMQ算法快速求解中间块的最大值。

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

UVA - 11235

题意:给出一个非降序的整数数组,你的任务是对于一系列询问,回答区间内出现最多的值的次数。

tags: 大白书的题果然有意思,智商不够用了

1】注意给出的是非降序的数组,那么相同的数是连在一起的。所以我们可以先游程编码,即比如 -1 -1 1 1 1 1 3 10 10 10  变为  (1,2) 、(2,4)、(3,1)、(4,3)。

2】然后询问 l, r , 如果 l, r 在同一个块里,就直接减;否则,答案就是 max( 左边块占有的长度,右边块占有的长度,中间所有块的最大值 )。  而中间所有块的最大值用 RMQ 解决。

#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define rep(i,a,b) for (int i=a; i<=b; ++i)
#define per(i,b,a) for (int i=b; i>=a; --i)
#define mes(a,b)  memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define MP make_pair
#define PB push_back
#define fi  first
#define se  second
typedef long long ll;
const int N = 100005;

int n, q, cnt, a[N], f[N][30];
pair< int, int > p[N];
void Init_RMQ()
{
    rep(i,1,cnt) f[i][0]=p[i].se;
    for(int j=1; (1<<j)<=cnt; ++j)
        for(int i=1; i+(1<<j)-1<=cnt; ++i)
            f[i][j] = max(f[i][j-1], f[i+(1<<(j-1))][j-1]);
}
int query(int l, int r)
{
    if(r-l+1<=0) return 0;
    int lg = floor(log2(r-l+1));
    return max(f[l][lg], f[r-(1<<lg)+1][lg]);
}
int id[N], num[N];
int solve(int ql, int qr)
{
    int idl=id[ql], idr=id[qr];
    if(idl==idr) return qr-ql+1;
    return max(num[idl]-ql+1, max(qr-num[idr-1], query(idl+1,idr-1)));
}
int main()
{
    while(~scanf("%d", &n), n)
    {
        scanf("%d", &q);
        cnt = 0;
        a[0]=INF;
        rep(i,1,n)
        {
            scanf("%d", &a[i]);
            if(a[i]!=a[i-1]) p[++cnt]=MP(a[i],1), num[cnt]=num[cnt-1]+1;
            else ++p[cnt].se, ++num[cnt];
            id[i] = cnt;
        }
        Init_RMQ();
        int ql, qr;
        while(q--)
        {
            scanf("%d%d", &ql, &qr);
            printf("%d\n", solve(ql, qr));
        }
    }

    return 0;
}

转载于:https://www.cnblogs.com/sbfhy/p/8447799.html

内容概要:本文深入解析了扣子COZE AI编程及其详细应用代码案例,旨在帮助读者理解新一代低门槛智能体开发范式。文章从五个维度展开:关键概念、核心技巧、典型应用场景、详细代码案例分析以及未来发展趋势。首先介绍了扣子COZE的核心概念,如Bot、Workflow、Plugin、Memory和Knowledge。接着分享了意图识别、函数调用链、动态Prompt、渐进式发布及监控可观测等核心技巧。然后列举了企业内部智能客服、电商导购助手、教育领域AI助教和金融行业合规质检等应用场景。最后,通过构建“会议纪要智能助手”的详细代码案例,展示了从需求描述、技术方案、Workflow节点拆解到调试与上线的全过程,并展望了多智能体协作、本地私有部署、Agent2Agent协议、边缘计算插件和实时RAG等未来发展方向。; 适合人群:对AI编程感兴趣的开发者,尤其是希望快速落地AI产品的技术人员。; 使用场景及目标:①学习如何使用扣子COZE构建生产级智能体;②掌握智能体实例、自动化流程、扩展能力和知识库的使用方法;③通过实际案例理解如何实现会议纪要智能助手的功能,包括触发器设置、下载节点、LLM节点Prompt设计、Code节点处理和邮件节点配置。; 阅读建议:本文不仅提供了理论知识,还包含了详细的代码案例,建议读者结合实际业务需求进行实践,逐步掌握扣子COZE的各项功能,并关注其未来的发展趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值