首页 > 其他分享 >P2804 神秘数字

P2804 神秘数字

时间:2024-07-31 23:16:53浏览次数:5  
标签:神秘 数字 nums int mid P2804 msort ans 逆序

Abstract

传送门
给出一个序列,要求我们找出平均值大于 m 的子段的数量。这题和逆序对还有些关系呢。

Idea

很容易想到,我们要对原序列进行以下预处理:a[i] -= m ,这样一来,问题转变为找和值大于 0 的子段,那么我们再对原序列做一次前缀和,接下来,对于区间 [l,r] ,若 a[r] - a[l-1] > 0,则这个区间形成一个合法子段,等等,这不就是在找顺序对吗?把这个序列倒过来就是找逆序对的模板题了!

顺便解释一下求逆序对的方法,直接看代码注释吧。

Code

#include <bits/stdc++.h>
using namespace std;
const int MOD = 92084931;
int n, m;
int nums[10000000];
int b[10000000];
int ans;
void msort(int l, int r)
{
    if (l == r)
    {
        return;
    }
    // 分成两半,依次排好序
    int mid = l + r >> 1;
    // 左右两部分各自产生的逆序对在排序时已经被计算
    msort(l, mid);
    msort(mid + 1, r);
    // 接下来把这排好的两部分合并
    int i = l, j = mid + 1, k = l;
    while (i <= mid && j <= r)
    {
        if (nums[i] <= nums[j])
        {
            b[k++] = nums[i++];
        }
        else // 计算右边区间的数产生了多少逆序对
        {
            // mid+1-i 是右边区间的每一个数产生的贡献
            b[k++] = nums[j++], ans += (mid + 1 - i) % MOD;
            ans %= MOD;
        }
    }
    // 把剩下的数也加到序列里面
    while (i <= mid)
    {
        b[k++] = nums[i++];
    }
    while (j <= r)
    {
        b[k++] = nums[j++];
    }
    for (int i = l; i < r + 1; i++)
    {
        nums[i] = b[i];
    }
    return;
}

int main()
{
    scanf("%d %d", &n, &m);
    for (int i = 1; i < n; i++)
    {
        int p;
        scanf("%d ", &p);
        p -= m;
        nums[i] = p + nums[i - 1];
        if (nums[i] > 0)
        {
            ans++;
            ans %= MOD;
        }
    }
    scanf("%d", &nums[n]);
    nums[n] -= m;
    nums[n] += nums[n - 1];
    if (nums[n] > 0)
    {
        ans++;
        ans %= MOD;
    }
    reverse(nums + 1, nums + 1 + n);
    msort(1, n);
    cout << ans;
    return 0;
}

标签:神秘,数字,nums,int,mid,P2804,msort,ans,逆序
From: https://www.cnblogs.com/carboxylBase/p/18335708

相关文章

  • 数字车间与智能工厂:区别、联系与制造业的未来转型
    数字车间和智能工厂在制造业中扮演着重要角色,它们之间存在明显的区别和紧密的联系。以下是对两者区别和联系的详细阐述:一、区别定义与范围数字车间:数字车间是指通过信息化技术、智能化装备和数据化管理等手段,实现生产过程全面数字化、智能化、自动化的一种生产模式。它主......
  • 【专题】2023年中国数字金融调查报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34685原文出处:拓端数据部落公众号随着数字化转型的深入推进,新客户的增长速度已达顶峰,用户运营成为推动存量增长的关键手段。调查数据显示,相比去年,网上银行用户比例有所下降,而手机银行用户比例基本持平。阅读原文,获取专题报告合集全文,解锁文末249份......
  • 企业数字化转型的必备钥匙:数据思维|专题报告集
    原文链接:https://tecdat.cn/?p=37165本质上来讲,企业数字化转型,不仅是技术方面的升级,更是企业文化、思维方式的转变。那么,企业数字化转型究竟需要什么样的思维方式?企业数字化转型,需要什么样的思维方式?不知道你有没有过这样的感觉:不知道从什么时候开始,和人沟通过程,以及要说服别人......
  • 全新小体积RK3562核心板,解锁神秘技能!
    RK3562小体积金手指系列核心板基于瑞芯微四核Cortex-A53+Cortex-M0处理器设计,工作主频高达2GHz,最高搭载4GB高速LPDDR4、32GB eMMC。该核心板拥有204 Pin脚,尺寸仅为67.6mm *45mm,支持千兆网、USB3.0、串口、PCIE、HDMI等丰富外设资源,非常适合于高性能、高性价比的工业应用场景。......
  • 数字检测 题解
    题目id:20317题目描述作为一个学渣的鱼大大在学习了进制数之后,经常会写错进制数,导致他在做题的时候经常出现,写到了最后发现数字是错的情况,非常浪费时间。所以他迫切地想要一位大聪明随时随刻能帮他检测一下他写的\(n\)进制数到底是不是对的。现在鱼大大给出了一个\(n\)进制的数\(......
  • 无线可穿戴数字听诊器解决方案特色解析
    前记 随着可穿戴技术的不断进步,以及医疗健康领域的数字化进程不断加快。听诊器的数字化逐步市场提到了一个必须要解决的问题,鉴于此,团队在深耕生理信号采集的过程中,不断完善可穿戴数字听诊器的方案。经过长时间的努力,做出来一系列基于低功耗蓝牙的可穿戴听诊器解决方案。可以满......
  • BI 工具如何助力市政设计公司实现数字化转型?
    一、前言近年来,国家出台多个政策文件来鼓励和发展数字化和智能化,如《十四五规划》提出要推进产业数字化转型、《交通强国建设纲要》提出要大力发展智慧交通、上海市发布的《关于全面推进上海城市数字化转型的意见》中强调了以数据要素为核心,构建城市运行生命体征指标体系和城市神......
  • 【Python】正色表达式 - 验证罗马数字
    一、题目Youaregivenastring,andyouhavetovalidatewhetherit'savalidRomannumeral.Ifitisvalid,printTrue.Otherwise,printFalse.TraytocreatearegularexpressionforavalidRomannumeral.InputFormatAsinglelineofinputcontainin......
  • 学习笔记 String类案例练习 1.模拟用户登录 2.统计字符串英文字母大小写及数字个数
    目录案例一模拟用户登录需求:代码: 案例二统计字符串英文字母大小写及数字个数需求:代码:案例一模拟用户登录需求:已知正确的用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示代码:publicstaticvoidmain(String[]args){......
  • 【PCB设计原则4】-数字地,模拟地和功率地
    一般来说,对于低频和小功率的板子,刨除各种测试认证,完全是可以直接傻瓜式铺铜,来解决地平面的问题的。实际板子上的地是这样的,数字地和模拟地分别通过0R电阻与电源地单点接地。因为数字器件的噪声容限大,但本身的01开关,会产生数字电路中的dI/dt(电流随时间的变化)效应,......