当前位置: 首页 > news >正文

树状数组 / pbds解法 E2. Array Optimization by Deque

Problem - 1579E2 - Codeforces

image-20231126234824468

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​插入到队头&#xff0c;贡献为&#xff1a;原队列中所有比 a i a_i ai​小的数的数量将 a i a_i ai​插入到队尾&#xff0c;贡献为&a…...

原神「神铸赋形」活动祈愿现已开启

亲爱的旅行者&#xff0c;「神铸赋形」活动祈愿现已开启&#xff0c;「单手剑静水流涌之辉」「法器碧落之珑」概率UP&#xff01; 活动期间&#xff0c;旅行者可以在「神铸赋形」活动祈愿中获得更多武器与角色&#xff0c;提升队伍的战斗力&#xff01; 〓祈愿时间〓 4.2版本更…...

php使用Session实现简单购物车功能

一个简单的商城购物车功能。它使用了PHP的会话(Session)来存储购物车数据&#xff0c;通过调用不同的函数来实现添加商品、移除商品、更新商品数量以及清空购物车的功能 session_start();// 初始化购物车 if (!isset($_SESSION[cart])) {$_SESSION[cart] array(); }// 添加商品…...

【JavaScript】alert的使用方法 | 超详细

alert作用效果 alert&#xff08;&#xff09;方法用于显示带有一条指定消息和一个确认的按钮的警告框。 alert使用方法 方法一&#xff1a;直接写在script标签内 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…...

总结Vue3里一些常见的组合式api

一&#xff1a;前言 二&#xff1a;常见api 1、ref 和 reactive 这两个组合式 api 是在 Vue3 开发中最为常见的两个 api &#xff0c;主要是将一个非响应式的数据变为响应式数据。 ref作用: 定义一个数据的响应式 语法: const xxx ref(initValue):创建一个包含响应式数据的引…...

C_5练习题

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案&#xff0c;并将所选项前的字母填写在答题纸的相应位置上。) 1.以下不正确的C语言标识符是(&#xff09; A. AB1 B._ab3 C. char D. a2_b 若 x、i、j、k都是 int型变量&#…...

【采坑分享】导出文件流responseType:“blob“如何提示报错信息

目录 前言&#xff1a; 采坑之路 总结&#xff1a; 前言&#xff1a; 近日&#xff0c;项目中踩了一个坑分享一下经验&#xff0c;也避免下次遇到方便解决。项目基于vue2axioselement-ui&#xff0c;业务中导出按钮需要直接下载接口中的文件流。正常是没有问题&#xff0c;但…...

机器学习算法——主成分分析(PCA)

目录 1. 主体思想2. 算法流程3. 代码实践 1. 主体思想 主成分分析&#xff08;Principal Component Analysis&#xff09;常用于实现数据降维&#xff0c;它通过线性变换将高维数据映射到低维空间&#xff0c;使得映射后的数据具有最大的方差。主成分可以理解成数据集中的特征…...

01、copilot+pycharm

之——free for student 目录 之——free for student 杂谈 正文 1.for student 2.pycharm 3.使用 杂谈 copilot是github推出的AI程序员&#xff0c;将chatgpt搬到了私人终端且无token限制&#xff0c;下面是使用方法。 GitHub Copilot 是由 GitHub 与 OpenAI 合作开发的…...

一般将来时

一般将来时 概念 表示将要发生的动作或打算、计划准备做某事 时间 tomorrow 明天 the day after tomorrow 后天 next week 下周 next weekend 下周末 next month 下个月 next year 明年 ...句子结构 主语 be&#xff08;am/is/are&#xff09;going to do … 计划,…...

【古诗生成AI实战】之四——模型包装器与模型的训练

在上一篇博客中&#xff0c;我们已经利用任务加载器task成功地从数据集文件中加载了文本数据&#xff0c;并通过预处理器processor构建了词典和编码器。在这一过程中&#xff0c;我们还完成了词向量的提取。 接下来的步骤涉及到定义模型、加载数据&#xff0c;并开始训练过程。…...

redis实现消息延迟队列

业务场景 在很多软件系统功能中都会出现定时任务的业务场景,比如提前点单,比如定时发布动态,文章等而出现这样的的定时的任务为延迟队任务 代码模块 任务的持久化一般都需要建立一个任务表和任务日志表,避免宕机导致任务失效,先新建立一个数据库,创建基本的任务表和任务日志表…...

keyof

// 在TypeScript中&#xff0c;keyof是一个操作符&#xff0c; // 它允许你从一个类型中提取所有的可枚举属性名&#xff0c;并将它们组成一个联合类型。 // 例如&#xff0c;假设你有这样一个类型&#xff1a; type Person { firstName: string; lastName: string; age: n…...

Centos 7 更改 PostgreSQL 14 默认存储路径

前言&#xff1a; 默认PostgreSQL数据存储路径为&#xff1a;/var/lib/pgsql/14/data 迁移到新的存储路径&#xff1a;/mnt/postgresql/data 1、关闭PostgreSQL服务 systemctl stop postgresql-142、创建目录 # 创建新目录 mkdir -p /mnt/postgresql/data# 更改目录权限 chow…...

深信服超融合一体机提示:内存ECC

PS&#xff1a;此事件分享主要来源于季度巡检时发现的超融合一体机红灯闪烁异常&#xff0c;接入IPMI端口查看日志发现持续提示内存ECC&#xff1b; 因为是只有3.05这一天发现了有这个告警的提示&#xff0c;所以当时清除了日志以后重启了BMC服务就解决了&#xff1b;但是如果清…...

STK Components 二次开发-地面站传感器

上一篇我们说了创建地面站&#xff0c;那么这次我们在地面站添加一些特效。 1. 创建地面站 var locationPoint1 new PointCartographic(m_earth, new Cartographic(Trig.DegreesToRadians(117.17066), Trig.DegreesToRadians(31.84056), 240.359)); m_facility new Platfor…...

基于springboot校园车辆管理系统

背景 伴随着社会经济的快速发展&#xff0c;机动车保有量不断增加。不断提高的大众生活水平以及人们不断增长的自主出行需求&#xff0c;人们对汽车的 依赖性在不断增强。汽车已经发展成为公众日常出行的一种重要的交通工具。在如此形势下&#xff0c;高校校园内的机动车数量也…...

通用电气调查网络攻击和数据盗窃指控

通用电气正在调查有关威胁行为者在网络攻击中破坏了公司开发环境并泄露据称被盗数据的指控。 通用电气 (GE) 是一家美国跨国公司&#xff0c;业务涉及电力、可再生能源和航空航天行业。 本月早些时候&#xff0c;一个名为 IntelBroker 的威胁行为者试图在黑客论坛上以 500 美…...

2023亚太赛数学建模A题:采果机器人的图像识别技术思路模型代码

亚太A题&#xff1a;采果机器人的图像识别技术 A题完整思路获取 &#xff1a;获取见文末名片&#xff0c;第一时间更新 中国是世界上最大的苹果生产国&#xff0c;年产量约为3500万吨。与此同时&#xff0c;中国也是世 界上最大的苹果出口国&#xff0c;全球每两个苹果中就有…...

C++ 协程

经典协程辅助入门代码&#xff1a; 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…...

手把手教你用MySQL搭建苍穹外卖数据库(附完整sky.sql源码)

从零构建外卖系统数据库&#xff1a;MySQL实战与设计精要 第一次接触数据库设计时&#xff0c;我盯着电脑屏幕发呆了整整半小时——那些看似简单的用户地址、菜品分类和订单状态&#xff0c;到底该如何用数据表合理表达&#xff1f;如果你也曾在数据库建模时感到无从下手&#…...

如何在WPF中捕获窗口外的事件

捕获窗口消息 关于窗口消息&#xff0c;可以参考下面的文章 https://www.cnblogs.com/zhaotianff/p/11285312.html https://www.cnblogs.com/zhaotianff/p/11297319.html 在WPF中&#xff0c;对于操作系统层面的原始输入 / 窗口消息&#xff0c;如 WM_LBUTTONDOWN、WM_MOUSE…...

Qt桌面应用集成Edge内核:保姆级WebView2环境配置与NuGet包本地化部署指南

Qt桌面应用集成Edge内核&#xff1a;WebView2环境配置与本地化部署实战 在Windows平台下开发Qt应用时&#xff0c;传统的Qt WebEngine模块虽然功能完备&#xff0c;但存在启动缓慢、内存占用高、编译体积大等问题。许多开发者开始寻求更轻量高效的替代方案&#xff0c;而微软E…...

MindSpore 环境配置完全指南雀

前面我们对 Kafka 的整体架构和一些关键的概念有了一个基本的认知&#xff0c;本文主要介绍 Kafka 的一些配置参数。掌握这些参数的作用对我们的运维和调优工作还是非常有帮助的。 写在前面 Kafka 作为一个成熟的事件流平台&#xff0c;有非常多的配置参数。详细的参数列表可以…...

Unity UI 圆角渲染架构解析:从传统方案到现代Shader技术的演进

Unity UI 圆角渲染架构解析&#xff1a;从传统方案到现代Shader技术的演进 【免费下载链接】Unity-UI-Rounded-Corners These components and shaders allow you to add rounded corners to UI elements! 项目地址: https://gitcode.com/gh_mirrors/un/Unity-UI-Rounded-Corn…...

Anthropic Harness工程入门基础教程(非常详细),收藏这一篇就够了!

用 ChatGPT 和用 Claude Code&#xff0c;是两种完全不同的体感。 前者就是聊天&#xff0c;后者是在聊天的基础上给用户干活。 像 Claude Code 这样的 Coding Agent 打开终端&#xff0c;需求丢进去&#xff0c;它开始读文件、搜索代码、执行命令、跑测试、提 PR&#xff0c…...

快速解密Wii U NUS文件:CDecrypt工具的终极解决方案

快速解密Wii U NUS文件&#xff1a;CDecrypt工具的终极解决方案 【免费下载链接】cdecrypt Decrypt Wii U NUS content — Forked from: https://code.google.com/archive/p/cdecrypt/ 项目地址: https://gitcode.com/gh_mirrors/cd/cdecrypt 对于Wii U游戏开发者和模组…...

DS4Windows深度解析:专业级PS4手柄Windows配置实战指南

DS4Windows深度解析&#xff1a;专业级PS4手柄Windows配置实战指南 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows DS4Windows是一款功能强大的开源工具&#xff0c;专门为PlayStation Du…...

智能医学影像分析系统 手骨X光影像的骨折检测与分类任务 手骨x光识别10653期(数据集+模型+界面+代码)

手骨x光识别10653期 README 项目概述 类别 远端指间关节 掌指关节 近端指间关节 桡骨 尺骨 腕部/手腕手骨X光影像数据集分析数据概览关键信息总数量及类别8900&#xff0c;类别&#xff1a;6数据集数量&#xff08;取整&#xff09;8900数据格式与应用价值YoloVOC&#xff0c;适…...

揭开推挽电路的奥秘 —— 高效功率放大的经典架构

在模拟电子技术的长河中&#xff0c;推挽电路&#xff08;Push-Pull Circuit&#xff09;无疑是功率放大领域的里程碑式设计。它如同电子世界里的 “双人接力赛”&#xff0c;通过两个晶体管的协同工作&#xff0c;高效地完成信号放大任务&#xff0c;彻底改变了传统单管放大电…...