链接:P3149 排序 - 洛谷

题目:

思路:

经典搭配了

首先我们来分析以下操作的作用,如果我们选了 a[k],那么对逆序对有什么影响呢?

①.对于 x y,且 x > a[k],y <= a[k]

由于 x > a[k],那么 即使重新排序了 x 的位置也不变,且 y 也依旧是 <= a[i] 的,所以没有影响

②.对于 x y,且 x > a[k],y > a[k]

由于二者均大于 a[k],那么相对位置保持不变,依旧没影响

③.对于 x y,且 x <= a[k],y <= a[k],x > y

由于二者都小于 a[k],那么其相对位置就会改变,即变为 y < x,此时不构成逆序对,因此有影响

综上:每次操作其实就是将所有 x <= a[k] 的奉献全删去

所以我们可以利用树状数组求出每个数的奉献,然后用一个前缀和加起来即可,每次查询就用总和减去 sum[a[k]] 即可

注意点:离散化,由于 a 的数据范围很大,所以得离散化一下,防止爆炸;对于 k 我们也有限制,如果之前某次查询存在过一个 k' 有 a[k'] >= a[k],那么这次的 k 就不需要了,因为之前已经删过了,也就是说我们要存储一个最大的 a[k]

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
int n, m;
pair<int,int> a[300005];
int b[300005];
int tree[300005];
int sum[300005];
int lowbit(int x)
{return x & -x;
}void add(int x)
{for (; x <= n; x += lowbit(x)){tree[x]++;}
}int query(int x)
{int sum = 0;for (;x;x-=lowbit(x)){sum += tree[x];}return sum;
}void solve()
{cin >> n >> m;for (int i = 1; i <= n; i++){cin >> a[i].first;a[i].second = i;}sort(a+1, a + n+1);int last = -1;int now = 0;for (int i = 1; i <= n; i++){if (a[i].first != last) now++;b[a[i].second] = now;}for (int i = n; i >= 1; i--){sum[b[i]] += query(b[i] - 1);add(b[i]);}for (int i = 1; i <= n; i++){sum[i] += sum[i - 1];}cout << sum[n] << endl;int mx = 0;while (m--){int k;cin >> k;if (b[k] > b[mx]){mx = k;}cout << sum[n] - sum[b[mx]] << endl;}
}
signed main()
{//cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90358.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90358.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/90358.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商项目_秒杀_架构升级

1. 秒杀当前架构设计nginx节点和订单服务都可以方便的扩容&#xff08;增加机器&#xff09;redis扩容需则需要考虑架构设计当前架构面临的痛点&#xff1a;秒杀系统redis是单节点&#xff08;主从&#xff09;部署&#xff0c;读redis时并发量会成为瓶颈。所以考虑将增加redis…

CodeBuddy IDE发布:编程新时代的颠覆者?

开场&#xff1a;编程界的 “新风暴” 来袭 你能想象&#xff0c;不用敲一行代码就能开发软件吗&#xff1f;这个曾经只存在于科幻电影里的场景&#xff0c;如今已经成为现实&#xff01;就在最近&#xff0c;编程界迎来了一场 “新风暴”——CodeBuddy IDE 重磅发布&#xff…

深度分析Java类加载机制

Java 的类加载机制是其实现平台无关性、安全性和动态性的核心基石。它不仅仅是简单地将 .class 文件加载到内存中&#xff0c;而是一个精巧、可扩展、遵循特定规则的生命周期管理过程。以下是对其深度分析&#xff1a; 一、核心概念与生命周期 一个类型&#xff08;Class 或 In…

神经网络实战案例:用户情感分析模型

在当今数字化时代&#xff0c;用户评论和反馈成为企业了解产品满意度的重要渠道。本项目将通过神经网络构建一个情感分析模型&#xff0c;自动识别用户评论中的情感倾向。我们将使用真实的产品评论数据&#xff0c;从数据预处理到模型部署&#xff0c;完整展示神经网络在NLP领域…

now能减少mysql的压力吗

是否用数据库的 NOW() 能减少 MySQL 的压力&#xff1f;​答案是否定的——使用 NOW() 不仅不会降低压力&#xff0c;反而可能略微增加 MySQL 的负载。以下是详细分析&#xff1a;&#x1f50d; 性能对比&#xff1a;NOW() vs. Java 传参​指标​​Java 传参 (e.g., new Date()…

数据结构01:链表

数据结构 链表 链表和数组的区别 1. 存储方式 数组&#xff1a; 元素在内存中连续存储&#xff0c;占用一块连续的内存空间元素的地址可以通过索引计算&#xff08;基地址 索引 元素大小&#xff09;大小固定&#xff0c;在创建时需要指定容量 链表&#xff1a; 元素&#xf…

【Java学习|黑马笔记|Day21】IO流|缓冲流,转换流,序列化流,反序列化流,打印流,解压缩流,常用工具包相关用法及练习

标题【Java学习|黑马笔记|Day20】 今天看的是黑马程序员的《Java从入门到起飞》下部的95-118节&#xff0c;笔记包含IO流中的字节、字符缓冲流&#xff0c;转换流&#xff0c;序列化流反序列化流&#xff0c;打印流&#xff0c;解压缩流&#xff0c;常用工具包相关用法及练习 …

API网关原理与使用场景详解

一、API网关核心原理 1. 架构定位 #mermaid-svg-hpDCWfqoiLcVvTzq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hpDCWfqoiLcVvTzq .error-icon{fill:#552222;}#mermaid-svg-hpDCWfqoiLcVvTzq .error-text{fill:#5…

OSPF路由协议——上

OSPF路由协议 RIP的不足 以跳数评估的路由并非最优路径如果RTA选择s0/0传输&#xff0c;传输需时会大大缩短为3s 最大跳数为16跳&#xff0c;导致网络尺度小RIP协议限制网络直径不能超过16跳&#xff0c;并且16跳为不可达。 收敛速度慢 RIP 定期路由更新 更新计时器&#xff1a…

(LeetCode 面试经典 150 题) 219. 存在重复元素 II (哈希表)

题目&#xff1a;219. 存在重复元素 II 思路&#xff1a;哈希表&#xff0c;时间复杂度0(n)。 哈希表记录每个数最新的下标&#xff0c;遇到符合要求的返回true即可。 C版本&#xff1a; class Solution { public:bool containsNearbyDuplicate(vector<int>& nums,…

Cookies 详解及其与 Session 的协同工作

Cookies 详解及其与 Session 的协同工作 一、Cookies 的本质与作用 1. 什么是 Cookies&#xff1f; Cookies 是由服务器发送到用户浏览器并存储在本地的小型文本文件。核心特性&#xff1a; 存储位置&#xff1a;客户端浏览器数据形式&#xff1a;键值对字符串&#xff08;最大…

DeepSeek Janus Pro本地部署与调用

step1、Janus模型下载与项目部署 创建文件夹autodl-tmp https://github.com/deepseek-ai/Janus?tabreadme-ov-file# janusflow 查看是否安装了git&#xff0c;没有安装的话安装一下&#xff0c;或者是直接github上下载&#xff0c;上传到服务器&#xff0c;然后解压 git --v…

【Elasticsearch】BM25的discount_overlaps参数

discount_overlaps 是 Elasticsearch/Lucene 相似度模型&#xff08;Similarity&#xff09;里的一个布尔参数&#xff0c;用来决定&#xff1a;> 在计算文档长度归一化因子&#xff08;norm&#xff09;时&#xff0c;是否忽略“重叠 token”&#xff08;即位置增量 positi…

Linux | LVS--Linux虚拟服务器知识点(上)

一. 集群与分布式1.1 系统性能扩展方式当系统面临性能瓶颈时&#xff0c;通常有以下两种主流扩展思路&#xff1a;Scale Up&#xff08;向上扩展&#xff09;&#xff1a;通过增强单台服务器的硬件配置来提升性能&#xff0c;这种方式简单直接&#xff0c;但受限于硬件物理极限…

【Linux-云原生-笔记】keepalived相关

一、概念Keepalived 是一个用 C 语言编写的、轻量级的高可用性和负载均衡解决方案软件。 它的主要目标是在基于 Linux 的系统上提供简单而强大的故障转移功能&#xff0c;并可以结合 Linux Virtual Server 提供负载均衡。1、Keepalived 主要提供两大功能&#xff1a;高可用性&a…

计算机网络:概述层---计算机网络的组成和功能

&#x1f310; 计算机网络基础全景梳理&#xff1a;组成、功能与核心机制 &#x1f4c5; 更新时间&#xff1a;2025年7月21日 &#x1f3f7;️ 标签&#xff1a;计算机网络 | 网络组成 | 分布式 | 负载均衡 | 资源共享 | 网络可靠性 | 计网基础 文章目录前言一、组成1.从组成部…

Linux中scp命令传输文件到服务器报错

上传本地文件到Linux服务器使用scp命令报错解决办法使用scp命令报错 Could not resolve hostname e: Name or service not known 解决办法 不使用登录服务器的工具传输&#xff0c;打开本地cmd&#xff0c;使用scp命令传输即可。 scp E:\dcm-admin.jar root127.0.0.1:/

历史数据分析——国药现代

医药板块走势分析: 从月线级别来看 2008年11月到2021年2月,月线上走出了两个震荡中枢的月线级别2085-20349的上涨段; 2021年2月到2024年9月,月线上走出了20349-6702的下跌段; 目前月线级别放巨量,总体还在震荡区间内,后续还有震荡和上涨的概率。 从周线级别来看 从…

#Linux内存管理# 在一个播放系统中同时打开几十个不同的高清视频文件,发现播放有些卡顿,打开视频文件是用mmap函数,请简单分析原因。

在播放系统中同时使用mmap打开几十个高清视频文件出现卡顿&#xff0c;主要原因如下&#xff1a;1. 内存映射&#xff08;mmap&#xff09;的缺页中断开销按需加载机制&#xff1a;mmap将文件映射到虚拟地址空间&#xff0c;但实际数据加载由“缺页中断&#xff08;Page Fault&…

AI黑科技:GAN如何生成逼真人脸

GAN的概念 GAN(Generative Adversarial Network,生成对抗网络)是一种深度学习模型,由生成器(Generator)和判别器(Discriminator)两部分组成。生成器负责生成 synthetic data(如假图像、文本等),判别器则试图区分生成数据和真实数据。两者通过对抗训练不断优化,最终…