树状数组 / pbds解法 E2. Array Optimization by Deque
Problem - 1579E2 - Codeforces

Array Optimization by Deque - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
树状数组解法
- 将 a i a_i ai插入到队头,贡献为:原队列中所有比 a i a_i ai小的数的数量
- 将 a i a_i ai插入到队尾,贡献为:原队列中所有比 a i a_i ai大的数的数量
可以发现对于每一次插入a值,影响插入的只跟已经放入的大于a或小于a的数量有关。
需要一个数据结构,满足:动态修改、查询。可以发现树状数组可以做这些操作,不过 a i a_i ai较大,开不下数组,可以离散化。
在离散化后,本题转为:查询 a i a_i ai前面的数量和后面的数量(大于/小于)。如果前面的数量小,就插前面,否则插入后面,将答案进行更新。
#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <set>
#include <map>
#include <queue>
#include <ctime>
#include <random>
#include <sstream>
#include <numeric>
#include <stdio.h>
#include <functional>
#include <bitset>
#include <algorithm>
using namespace std;#define Multiple_groups_of_examples
#define int_to_long_long
#define IOS std::cout.tie(0);std::cin.tie(0)->sync_with_stdio(false); // 开IOS,需要保证只使用Cpp io流 *
#define dbgnb(a) std::cout << #a << " = " << a << '\n';
#define dbgtt cout<<" !!!test!!! "<<'\n';
#define rep(i,x,n) for(int i = x; i <= n; i++)#define all(x) (x).begin(),(x).end()
#define pb push_back
#define vf first
#define vs secondtypedef long long LL;
#ifdef int_to_long_long
#define int long long
#endif
typedef pair<int,int> PII;const int INF = 0x3f3f3f3f;
const int N = 2e5 + 21;template <class T>
struct Fenwick { int n;vector<T> a;Fenwick(const int &n = 0) : n(n), a(n, T()) {}void modify(int i, T x) {for (i++; i <= n; i += i & -i) {a[i - 1] += x;}}T get(int i) {T res = T();for (; i > 0; i -= i & -i) {res += a[i - 1];}return res;}T sum(int l, int r) { // [l, r] *这里已经改过return get(r + 1) - get(l);}int kth(T k) {int x = 0;for (int i = 1 << __lg(n); i; i >>= 1) {if (x + i <= n && k >= a[x + i - 1]) {x += i;k -= a[x - 1];}}return x;}
};void inpfile();
void solve() {int n; cin>>n;vector<int> a(n);for(auto &t: a) cin>>t;// 离散化vector<int> id(a);sort(all(id));id.erase(unique(all(id)), id.end());vector<int> last(n);for(int i = 0; i < n; ++i) last[i] = lower_bound(all(id), a[i]) - id.begin() + 1;Fenwick<int> tr(n + 21);int sum = 0;for(int i = 0; i < n; ++i) {// lv表示插入队首,rv表示插入队尾的逆序对值int lv = tr.sum(1, last[i] - 1), rv = tr.sum(last[i] + 1, n + 20);sum += min(lv, rv);tr.modify(last[i], 1);}cout<<sum<<endl;}
#ifdef int_to_long_long
signed main()
#else
int main()
#endif{#ifdef Multiple_groups_of_examplesint T; cin>>T;while(T--)#endifsolve();return 0;
}
void inpfile() {#define mytest#ifdef mytestfreopen("ANSWER.txt", "w",stdout);#endif
}
pbds 解法
pbds库学习笔记(优先队列、平衡树、哈希表) - 知乎 (zhihu.com)
发现核心就是求排名,平衡树即可。这里提供pbds的代码:
#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <set>
#include <map>
#include <queue>
#include <ctime>
#include <random>
#include <sstream>
#include <numeric>
#include <stdio.h>
#include <functional>
#include <bitset>
#include <algorithm>// pbds
#include <bits/extc++.h>
using namespace __gnu_cxx;
using namespace __gnu_pbds;
using namespace std;#define Multiple_groups_of_examples
#define int_to_long_long
#define IOS std::cout.tie(0);std::cin.tie(0)->sync_with_stdio(false); // 开IOS,需要保证只使用Cpp io流 *
#define dbgnb(a) std::cout << #a << " = " << a << '\n';
#define dbgtt cout<<" !!!test!!! "<<'\n';
#define rep(i,x,n) for(int i = x; i <= n; i++)#define all(x) (x).begin(),(x).end()
#define pb push_back
#define vf first
#define vs secondtypedef long long LL;
#ifdef int_to_long_long
#define int long long
#endif
typedef pair<int,int> PII;const int INF = 0x3f3f3f3f;
const int N = 2e5 + 21;
// pbds
typedef tree<PII, null_type, less<PII>, rb_tree_tag, tree_order_statistics_node_update> Tree;
void inpfile();
void solve() {int n; cin>>n;Tree tr;int sum = 0;for(int i = 0; i < n; ++i) {int t; cin>>t;int lv = tr.order_of_key({t, 0}), rv = i - tr.order_of_key({t, n});sum += min(lv, rv);tr.insert({t, i});}cout<<sum<<endl;
}
#ifdef int_to_long_long
signed main()
#else
int main()
#endif{#ifdef Multiple_groups_of_examplesint T; cin>>T;while(T--)#endifsolve();return 0;
}
void inpfile() {#define mytest#ifdef mytestfreopen("ANSWER.txt", "w",stdout);#endif
}
pbds库学习笔记(优先队列、平衡树、哈希表) - 知乎 (zhihu.com)
相关文章:
树状数组 / pbds解法 E2. Array Optimization by Deque
Problem - 1579E2 - Codeforces Array Optimization by Deque - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 树状数组解法 将 a i a_i ai插入到队头,贡献为:原队列中所有比 a i a_i ai小的数的数量将 a i a_i ai插入到队尾,贡献为&a…...
原神「神铸赋形」活动祈愿现已开启
亲爱的旅行者,「神铸赋形」活动祈愿现已开启,「单手剑静水流涌之辉」「法器碧落之珑」概率UP! 活动期间,旅行者可以在「神铸赋形」活动祈愿中获得更多武器与角色,提升队伍的战斗力! 〓祈愿时间〓 4.2版本更…...
php使用Session实现简单购物车功能
一个简单的商城购物车功能。它使用了PHP的会话(Session)来存储购物车数据,通过调用不同的函数来实现添加商品、移除商品、更新商品数量以及清空购物车的功能 session_start();// 初始化购物车 if (!isset($_SESSION[cart])) {$_SESSION[cart] array(); }// 添加商品…...
【JavaScript】alert的使用方法 | 超详细
alert作用效果 alert()方法用于显示带有一条指定消息和一个确认的按钮的警告框。 alert使用方法 方法一:直接写在script标签内 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…...
总结Vue3里一些常见的组合式api
一:前言 二:常见api 1、ref 和 reactive 这两个组合式 api 是在 Vue3 开发中最为常见的两个 api ,主要是将一个非响应式的数据变为响应式数据。 ref作用: 定义一个数据的响应式 语法: const xxx ref(initValue):创建一个包含响应式数据的引…...
C_5练习题
一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 1.以下不正确的C语言标识符是() A. AB1 B._ab3 C. char D. a2_b 若 x、i、j、k都是 int型变量&#…...
【采坑分享】导出文件流responseType:“blob“如何提示报错信息
目录 前言: 采坑之路 总结: 前言: 近日,项目中踩了一个坑分享一下经验,也避免下次遇到方便解决。项目基于vue2axioselement-ui,业务中导出按钮需要直接下载接口中的文件流。正常是没有问题,但…...
机器学习算法——主成分分析(PCA)
目录 1. 主体思想2. 算法流程3. 代码实践 1. 主体思想 主成分分析(Principal Component Analysis)常用于实现数据降维,它通过线性变换将高维数据映射到低维空间,使得映射后的数据具有最大的方差。主成分可以理解成数据集中的特征…...
01、copilot+pycharm
之——free for student 目录 之——free for student 杂谈 正文 1.for student 2.pycharm 3.使用 杂谈 copilot是github推出的AI程序员,将chatgpt搬到了私人终端且无token限制,下面是使用方法。 GitHub Copilot 是由 GitHub 与 OpenAI 合作开发的…...
一般将来时
一般将来时 概念 表示将要发生的动作或打算、计划准备做某事 时间 tomorrow 明天 the day after tomorrow 后天 next week 下周 next weekend 下周末 next month 下个月 next year 明年 ...句子结构 主语 be(am/is/are)going to do … 计划,…...
【古诗生成AI实战】之四——模型包装器与模型的训练
在上一篇博客中,我们已经利用任务加载器task成功地从数据集文件中加载了文本数据,并通过预处理器processor构建了词典和编码器。在这一过程中,我们还完成了词向量的提取。 接下来的步骤涉及到定义模型、加载数据,并开始训练过程。…...
redis实现消息延迟队列
业务场景 在很多软件系统功能中都会出现定时任务的业务场景,比如提前点单,比如定时发布动态,文章等而出现这样的的定时的任务为延迟队任务 代码模块 任务的持久化一般都需要建立一个任务表和任务日志表,避免宕机导致任务失效,先新建立一个数据库,创建基本的任务表和任务日志表…...
keyof
// 在TypeScript中,keyof是一个操作符, // 它允许你从一个类型中提取所有的可枚举属性名,并将它们组成一个联合类型。 // 例如,假设你有这样一个类型: type Person { firstName: string; lastName: string; age: n…...
Centos 7 更改 PostgreSQL 14 默认存储路径
前言: 默认PostgreSQL数据存储路径为:/var/lib/pgsql/14/data 迁移到新的存储路径:/mnt/postgresql/data 1、关闭PostgreSQL服务 systemctl stop postgresql-142、创建目录 # 创建新目录 mkdir -p /mnt/postgresql/data# 更改目录权限 chow…...
深信服超融合一体机提示:内存ECC
PS:此事件分享主要来源于季度巡检时发现的超融合一体机红灯闪烁异常,接入IPMI端口查看日志发现持续提示内存ECC; 因为是只有3.05这一天发现了有这个告警的提示,所以当时清除了日志以后重启了BMC服务就解决了;但是如果清…...
STK Components 二次开发-地面站传感器
上一篇我们说了创建地面站,那么这次我们在地面站添加一些特效。 1. 创建地面站 var locationPoint1 new PointCartographic(m_earth, new Cartographic(Trig.DegreesToRadians(117.17066), Trig.DegreesToRadians(31.84056), 240.359)); m_facility new Platfor…...
基于springboot校园车辆管理系统
背景 伴随着社会经济的快速发展,机动车保有量不断增加。不断提高的大众生活水平以及人们不断增长的自主出行需求,人们对汽车的 依赖性在不断增强。汽车已经发展成为公众日常出行的一种重要的交通工具。在如此形势下,高校校园内的机动车数量也…...
通用电气调查网络攻击和数据盗窃指控
通用电气正在调查有关威胁行为者在网络攻击中破坏了公司开发环境并泄露据称被盗数据的指控。 通用电气 (GE) 是一家美国跨国公司,业务涉及电力、可再生能源和航空航天行业。 本月早些时候,一个名为 IntelBroker 的威胁行为者试图在黑客论坛上以 500 美…...
2023亚太赛数学建模A题:采果机器人的图像识别技术思路模型代码
亚太A题:采果机器人的图像识别技术 A题完整思路获取 :获取见文末名片,第一时间更新 中国是世界上最大的苹果生产国,年产量约为3500万吨。与此同时,中国也是世 界上最大的苹果出口国,全球每两个苹果中就有…...
C++ 协程
经典协程辅助入门代码: typedef cotask::task my_task_t; int main() { // create a task using factory function [with lambda expression] my_task_t::ptr_t task my_task_t::create([]() { //创建协程 std::cout ()->get_id() cotask::this_task::get…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...
2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...
从数据报表到决策大脑:AI重构电商决策链条
在传统电商运营中,决策链条往往止步于“数据报表层”:BI工具整合历史数据,生成滞后一周甚至更久的销售分析,运营团队凭经验预判需求。当爆款突然断货、促销库存积压时,企业才惊觉标准化BI的决策时差正成为增长瓶颈。 一…...
