《算法笔记》13.2小节——专题扩展->树状数组(BIT) 问题 D: 数列-训练套题T10T3

数列(sequence.pas/c/cpp)

 问题描述

一个简单的数列问题:给定一个长度为n的数列,求这样的三个元素ai, aj, ak的个数,满足ai < aj > ak,且i < j < k。

 输入数据

第一行是一个整数n(n <= 50000)。

第二行n个整数ai(0 <= ai <= 32767)。

 输出数据

一个数,满足ai < aj > ak (i < j < k)的个数。

样例输入

5

1 2 3 4 1

样例输出

6

分析:思路类似问题 A,先求出一个数左边有多少比它小,再求出一个数的右边有多少比它小。而问题 A 中已经知道了前面怎么求,那么求右边有多少比它大,可以把这个数组反过来存,问题就转化为求左边有多少比它小。

#include<algorithm>
#include <iostream>
#include  <cstdlib>
#include  <cstring>
#include   <string>
#include   <vector>
#include   <cstdio>
#include    <queue>
#include    <stack>
#include    <ctime>
#include    <cmath>
#include      <map>
#include      <set>
#define INF 0x3fffffff
#define db1(x) cout<<#x<<"="<<(x)<<endl
#define db2(x,y) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<endl
#define db3(x,y,z) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<endl
#define db4(x,y,z,r) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#r<<"="<<(r)<<endl
#define db5(x,y,z,r,w) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#r<<"="<<(r)<<", "<<#w<<"="<<(w)<<endl
using namespace std;#define lowbit(i) ((i)&(-i))typedef struct node
{int val,pos;
}node;long long getsum(int x,int n,int c[])
{long long sum=0;for(int i=x;i>0;i-=lowbit(i))sum+=c[i];return sum;
}void update(int x,int v,int n,int c[])
{for(int i=x;i<=n;i+=lowbit(i))c[i]+=v;return;
}bool cmp(node a,node b)
{return a.val<b.val;
}int main(void)
{#ifdef testfreopen("in.txt","r",stdin);
//    freopen("out.txt","w",stdout);clock_t start=clock();#endif //testint n;while(~scanf("%d",&n)){node num[n+5];int c1[n+5]={0},c2[n+5]={0},a[n+5]={0},b[n+5]={0};for(int i=0;i<n;++i)scanf("%d",&num[i].val),num[i].pos=i;sort(num,num+n,cmp);for(int i=0;i<n;++i){if(i==0||num[i].val!=num[i-1].val)a[num[i].pos]=i+1;else a[num[i].pos]=a[num[i-1].pos];}for(int i=0;i<n;++i)b[i]=a[n-1-i];long long ans=0;long long sum1[n+5]={0},sum2[n+5]={0};for(int i=0;i<n;++i){update(a[i],1,n,c1);sum1[i]=getsum(a[i]-1,n,c1);update(b[i],1,n,c2);sum2[n-1-i]=getsum(b[i]-1,n,c2);}for(int i=0;i<n;++i)ans+=sum1[i]*sum2[i];printf("%lld\n",ans);}#ifdef testclockid_t end=clock();double endtime=(double)(end-start)/CLOCKS_PER_SEC;printf("\n\n\n\n\n");cout<<"Total time:"<<endtime<<"s"<<endl;        //s为单位cout<<"Total time:"<<endtime*1000<<"ms"<<endl;    //ms为单位#endif //testreturn 0;
}

最后记录一下《算法笔记》书练习的 AC 代码:codeup/13.2树状数组 at master · maximusyoung007/codeup · GitHub

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

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

相关文章

C# Windows Forms应用程序-001

目录 项目概述 主要组件及功能 类定义 控件声明 构造函数 Dispose 方法 InitializeComponents 方法 控件配置详解 Button 控件 (button1) TextBox 控件 (textBox1) GroupBox 控件 (groupBox1) Label 控件 (label1 至 label5) OpenFileDialog 控件 (openFileDialog1…

2025.5.28总结

今日工作&#xff1a;最近进入了项目的关键节点&#xff0c;要求每人每天提两单&#xff0c;今天周三&#xff0c;下班前只提了一个单。下午开了一场需求服务验收会&#xff0c;我演示了自己验收的那个需求&#xff0c;然后讲的不是很好。当初再构造数据时请教了一个人&#xf…

Transformer核心技术解析LCPO方法:精准控制推理长度的新突破

原创文章1FFN前馈网络与激活函数技术解析&#xff1a;Transformer模型中的关键模块2Transformer掩码技术全解析&#xff1a;分类、原理与应用场景3【大模型技术】Attention注意力机制详解一4Transformer模型中位置编码&#xff08;Positional Embedding&#xff09;技术全解析(…

在 WSL 中安装 JetBrains Toolbox:完整指南

JetBrains Toolbox 是一个非常实用的工具&#xff0c;它可以帮助开发者轻松管理 JetBrains 的各种开发工具&#xff0c;如 IntelliJ IDEA、PyCharm、WebStorm 等。通过它&#xff0c;你可以快速安装、更新和管理这些工具&#xff0c;极大地提高了开发效率。而在 WSL 环境中安装…

ZooKeeper 命令操作

文章目录 Zookeeper 数据模型Zookeeper 服务端常用命令Zookeeper 客户端常用命令 Zookeeper 数据模型 ZooKeeper 是一个树形目录服务,其数据模型和Unix的文件系统目录树很类似&#xff0c;拥有一个层次化结构。这里面的每一个节点都被称为&#xff1a; ZNode&#xff0c;每个节…

Turf.js:前端地理空间分析的瑞士军刀

在Web开发中,地理空间数据处理已成为许多应用的核心需求。从地图可视化到位置服务,再到复杂的数据分析,前端开发者需要强大的工具来处理这些任务。Turf.js 作为一款轻量级、模块化的地理空间分析库,凭借其丰富的功能和易用性,成为前端开发者的得力助手。本文将深入探讨 Tu…

大模型微调

使用 Ollama 微调大语言模型&#xff08;如 LLaMA、Mistral、Gemma 等&#xff09;主要是围绕 LoRA&#xff08;Low-Rank Adaptation&#xff09;或者 QLoRA 等轻量级微调技术进行的。Ollama 本身是一个部署和运行本地大语言模型的平台&#xff0c;但其微调能力有限&#xff0c…

《自动驾驶轨迹规划实战:Lattice Planner实现避障路径生成(附可运行Python代码)》—— 零基础实现基于离散优化的避障路径规划

《自动驾驶轨迹规划实战&#xff1a;Lattice Planner实现避障路径生成&#xff08;附可运行Python代码&#xff09;》 —— 零基础实现基于离散优化的避障路径规划 一、为什么Lattice Planner成为自动驾驶的核心算法&#xff1f; 在自动驾驶的路径规划领域&#xff0c;Lattice…

切换到旧提交,同时保证当前修改不丢失

在 Git 中&#xff0c;可以通过以下几种方式切换到之前的提交&#xff0c;同时保留当前的提交&#xff08;即不丢失工作进度&#xff09;&#xff1a; 1. 使用 git checkout 创建临时分离头指针&#xff08;推荐用于查看&#xff09; git checkout <commit-hash>这会让…

zookeeper 操作总结

zookeeper 中的节点类型 节点类型命令选项说明‌持久节点‌无选项&#xff08;默认&#xff09;永久存在&#xff0c;除非手动删除。‌临时节点‌-e与客户端会话绑定&#xff0c;会话结束自动删除&#xff08;‌不能有子节点‌&#xff09;。‌顺序节点‌-s节点名自动追加递增…

nova14 ultra,是如何防住80°C热水和10000KPa水压冲击的?

暴雨突袭&#xff0c;手忙脚乱护住背包&#xff0c;却担心手机被雨水浸湿&#xff1b;泳池里想记录美好时刻&#xff0c;却担心手机掉入水中 &#xff1b;厨房里充满了高温水汽&#xff0c;近距离拍摄美食瞬间&#xff0c;手机屏幕花屏&#xff0c;让人失去了对美食的兴趣…… …

flutter加载dll 报错问题

解决flutter加载dll 报错问题 LoadLibrary 报错 126 or 193 明确一点&#xff1a;flutter构建exe 时默认是MSVC的。 1. 先检查dll 的位数是否满足 file ***.dll output: PE32 executable (DLL) (console) x86-64, for MS Windows, 19 sections 这种是64位的机器。 满足的话可…

Mac 版不能连接华为 GaussDB 吗?我看 Windows 版可以连接?

&#x1f9d1;‍&#x1f4bb; GaussDB 用户 Mac 版不能连接华为 GaussDB 吗&#xff1f;我看Windows 版可以连接。 &#x1f9d1;‍&#x1f527; 官方技术中心 由于 GaussDB 数据库本身未支持 macOS 系统&#xff0c;所以在 macOS 上的 Navicat 中也未支持该数据库。 &…

【MySQL成神之路】MySQL索引相关介绍

1 相关理论介绍 一、索引基础概念 二、索引类型 1. 按数据结构分类 2. 按功能分类 三、索引数据结构原理 B树索引特点&#xff1a; 哈希索引特点&#xff1a; 四、索引使用原则 1. 创建索引原则 2. 避免索引失效情况 五、索引优化策略 六、索引维护与管理 七、特殊…

五、web安全--XSS漏洞(1)--XSS漏洞利用全过程

本文章仅供学习交流&#xff0c;如作他用所承受的法律责任一概与作者无关1、XSS漏洞利用全过程 1.1 寻找注入点&#xff1a;攻击者首先需要找到目标网站中可能存在XSS漏洞的注入点。这些注入点通常出现在用户输入能够直接输出到页面&#xff0c;且没有经过适当过滤或编码的地方…

使用 Shell 脚本实现 Spring Boot 项目自动化部署到 Docker(Ubuntu 服务器)

使用 Shell 脚本实现 Spring Boot 项目自动化部署到 Docker&#xff08;Ubuntu 服务器&#xff09; 在日常项目开发中&#xff0c;我们经常会将 Spring Boot 项目打包并部署到服务器上的 Docker 环境中。为了提升效率、减少重复操作&#xff0c;我们可以通过 Shell 脚本实现自动…

高考加油(Python+HTML)

前言 询问DeepSeek根据自己所学到的知识来生成多个可执行的代码&#xff0c;为高考学子加油。最开始生成的都会有点小问题&#xff0c;还是需要自己调试一遍&#xff0c;下面就是完整的代码&#xff0c;当然了最后几天也不会有多少人看&#xff0c;都在专心的备考。 Python励…

HTTP协议接口三种测试方法之-JMeter(保姆教程)

在当今 API 驱动的开发世界中&#xff0c;高效、可靠的 HTTP 接口测试是保障应用质量的关键。作为开源性能测试工具中的王者&#xff0c;Apache JMeter 不仅擅长压力测试&#xff0c;更是进行功能性和回归测试的利器。本文将手把手教你如何用 JMeter 构建强大的 HTTP 测试计划&…

聊聊JVM怎么调优?(实战总结)

JVM 核心配置与调优指南 一、堆内存与年轻代配置&#xff08;影响最大&#xff09; 堆内存大小&#xff1a; 在资源允许的前提下&#xff0c;堆内存应尽可能设置得更大。关键点&#xff1a; 必须将堆内存的最大值 (-Xmx) 和最小值 (-Xms) 设置为相同值。动态扩容会触发 Full G…

开疆智能Profinet转Profibus网关连接费斯托阀岛总线模块配置案例

本案例是通过开疆智能Profibus转Profinet网关将费托斯阀岛接入到西门子1200PLC的配置案例。 首先我们先了解一下Profibus报文以及他的通讯原理。 除了起始符 SD 和结束符 ED 这些固定数值之外&#xff0c;还有功能码&#xff08;Function Code, FC&#xff09;和服务访问点&…