PAT-TOP 1010. Lehmer Code (35)

2021.9.11 PAT顶级(100分) T1 开局刚看的时候没怎么看懂题,写了个假算法样例没过。开完T2回过头来重新读的题。 大致题意: 给出一组(key,value)对,按key值升序排列,以此为建堆顺序,根据value值建立小根堆,对建好的堆层序遍历。 做法: 读完题不太想去建堆(主要是太久没写代码,调试起来比较麻烦),找了个别的做法,对一个序列[l,r]遍历一遍找到value值最小的位置pos,记录pos,再把序列拆分成[l,pos-1]和[pos+1,r]两段重复如上做法,按层存储pos,遍历一遍输出。 难度大致 div2.B #incl 阅读详情

2016.3.12的浙大PAT顶级第二题。

题目链接

题目大意:

给出n个互不相同的数{a1,a2...an},要求一个长度是n的序列{l1,l2...ln},li表示在{ai~an}中有li个数比ai要小。

解题思路:

把这n个数映射到区间[1,n],设a[i]是映射后的数组,然后从后往前遍历这n个数,先用Sum(a[i])求到这个数加入前,区间[1,a[i]]已经有多少个数了(就是题目要求的li),再用Add(a[i],1)把这个数加到树状数组里。

代码:

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
struct node
{
	int val,id;
}p[100005];
int a[100005],ans[100005],c[100005],n;//a是映射后的数组,ans是要求的数组,c是用于保存树状数组的数组,n是数的个数,也是树状数组的上界
bool cmp(node a,node b)
{
	return a.val<b.val;
}
int lowbit(int x)
{
	return x&(-x);
}
int Sum(int x)
{
	int ans=0;
	while(x>0)
	{
		ans+=c[x];
		x-=lowbit(x);
	}
	return ans;
}
void Add(int x,int val)
{
	while(x<=n)
	{
		c[x]+=val;
		x+=lowbit(x);
	}
}
int main()
{
	int i;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&p[i].val);
		p[i].id=i;
	}
	sort(p+1,p+n+1,cmp);
	for(i=1;i<=n;i++)
		a[p[i].id]=i;
	for(i=n;i>=1;i--)
	{
		ans[i]=Sum(a[i]);
		Add(a[i],1);
	}
	printf("%d",ans[1]);
	for(i=2;i<=n;i++)
		printf(" %d",ans[i]);
	puts("");
	return 0;
}

1010 Lehmer Code (35 分)(思路+详解+树状数组的学习+逆序对+map+vector) 超级详细 Come baby!!! 一:题目 According to Wikipedia: “In mathematics and in particular in combinatorics, the Lehmer code is a particular way to encode each possible permutation of a sequence of n numbers.” To be more specific, for a given permutation of items {A }, Lehmer code is 阅读详情

相关推荐

pat顶级和leetcode-PAT-Basic-Level:个人准备的PAT乙级考试

pat顶级和leetcode PAT-Basic-Level 个人准备的PAT乙级考试 不定期更新,用空就来刷刷题。。。 更新日志: 时间 题目 17.5.9 1026.cpp 1046.cpp 17.5.13 1004.cpp 1018.cpp 1041.cpp 1032.cpp 17.5.14 1036.cpp 1027.cpp 1012.cpp 1028.cpp 17.5.15 1022.cpp 1037.cpp 17.5.17 1006.cpp 1021.cpp 1031.cpp 17.5.30 1024.cpp   1015.cpp 1029.cpp 17.6.5 1042.cpp 1039.cpp 1038.cpp 17.6.7 1043.cpp 1047.cpp 1023.cpp 1020.cpp 17.11.11 1040.cpp 1045.cpp 课程练习题及扩展练习题 章节 讲解例题 课程练习题 更多扩展练习 难题推荐 第一章 算法面试到底是什么鬼? [无] [无] 第二章 面试中的复杂度分析 [无] [无] 第三章 数组中的问题最常见 3-1 从二分查找法看如何写

PAT学习资料汇总(PAT甲级、PAT顶级、PAT考试经验)

二、PAT甲级 PAT甲级真题目录(按题型整理) PAT甲级真题目录(按题型整理)_love music.的博客-优快云博客_pat甲级真题 PAT甲【所有题目+解析+代码示例+总结】附带所有历年整体+讲解+代码 PAT甲【所有题目+解析+代码示例+总结】附带所有历年整体+讲解+代码_繁星蓝雨的博客-优快云博客 2020年9月PAT甲级满分必备刷题技巧 2020年9月PAT甲级满分必备刷题技巧_浒鱼鱼的博客-优快云博客_pat刷题 PAT甲级真题 PAT甲级真题_ZXX

青少年趣味编程 6302

Chapter 19 Digital Phase-Locked Loops

数字锁相环 Digital Phase-Locked Loops, 就是根据原来时钟信号, 产生新的时钟信号, which is locked or synchronized. (align 参考时钟边沿 or 在中间)

2304_76736886的博客 973

PAT顶级_2024秋(正赛35+模拟AK)

-250

hzj913313180的博客 2107

STM32Cubemx-H7-17-麦克纳姆轮驱动

我们先看.h,知道哪些函数会有哪些功能和宏定义参数首先 是在.h的宏定义处定义引脚编号,比如tb6612控制方向的引脚,以及设定了哪个定时器作为pwm输出,还有编码计次的中断引脚/* 硬件相关宏定义 *//*1 前进方向往上 42 3*/// TB6612 方向引脚定义/* 定时器相关宏定义 *//* 编码器相关宏定义 */把自己的引脚根据原理图填对应,方向引脚也是,如果发现反转就把对应的引脚定义反过来,编码也是,编码我们用一个引脚就好,都在cubemx配置好。

m0_74211379的博客 1420

骨架动作识别新突破:CTR-GCN的通道拓扑优化策略解析

本文深入解析了CTR-GCN在骨架动作识别中的通道拓扑优化策略。通过引入通道级拓扑细化,CTR-GCN克服了传统GCN共享拓扑结构的局限性,显著提升了动作识别的准确率。文章详细介绍了CTR-GCN的三大核心组件设计,包括特征变换模块、通道拓扑建模和通道聚合技术,并提供了实战调参经验和模型压缩技巧,为计算机视觉领域的研究者和开发者提供了有价值的参考。

weixin_27310417的博客 192

四大含金量高的算法证书考试

四大含金量高的算法证书考试

QYgujingjing的专栏 1万+

手把手教你用Python模拟侧信道攻击:从电磁辐射到数据窃取(附防御代码)

本文详细介绍了如何使用Python模拟侧信道攻击,从电磁辐射信号采集到数据窃取的全过程,并提供了实用的防御代码。通过实战案例,帮助安全研究员和开发者理解侧信道攻击原理,掌握信号处理与图像重建技术,同时学习有效的噪声干扰和电磁屏蔽防御措施。

weixin_28716443的博客 161

1010 Lehmer Code (35 分)(思路+详解+树状数组的学习,20道Java工程师面试必问题

相关知识介绍:1.理解图 A[i]:表示的是正常的数组C[i]:表示的是区间的和2.那么如何表示C[i] 中 i表示的个数呢 这时候要用到lowbit(i),3.i + lowbit[i]:表示其父亲结点的下标i - lowbit(i):表示其左边管辖区域的下标4.相关的函数(1):求取lowbit(i)(2):更新单点的值,就是如果你给区间内的某个值增加一定的数,那么其父节点也会增加相应的值eg: A[1]比以前大了,那么C[1]也要比以前的大,他的父节点C[2],

fdsgdsgdfw的博客 736

Claude Code教程(二) | Claude Code 核心信息与使用指南

Claude Code 核心信息与使用指南

qq_20236937的博客 2183

深入理解C++23的Deducing this特性(上):基础概念与语法详解

C++23标准中引入的"Deducing this"特性是一项重大革新,它不仅改变了我们编写成员函数的方式,还为模板元编程和设计模式实现带来了新的可能。

weixin_61470881的博客 1333

pat-top 1010. Lehmer Code (35)

https://www.patest.cn/contests/pat-t-practise/1010 离散化+树状数组 code from http://blog.csdn.net/jtjy568805874/article/details/50898105 #include #include using namespace std; const int max

guojiaqi007的专栏 372

AI对嵌入式的冲击分三波,大多数人只看到了第一波

摘要:AI对嵌入式行业的冲击将分三波递进:第一波(已发生)是代码生成,AI能完成底层驱动配置;第二波(1-2年内)是架构设计,AI将参与系统方案制定;第三波(2-3年)是需求验证,AI能穷举测试用例但无法替代安全决策。每波冲击都将重新定义工程师的价值标准,经验型工程师若不能将隐性知识转化为显性规则将面临淘汰。作者指出,完全不用AI的人第一波就会被淘汰,而仅满足于第一波应用的人将在后续冲击中落后。

u010898524的博客 962

PAT TOP 1010. Lehmer Code (35)

问题描述:1010. Lehmer Code (35)时间限制300 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者LIU, YaotingAccording to Wikipedia: "In mathematics and in particular in combinatorics, the Lehmer code is a particular way t...

kircher的博客 438

华为[ENSP]OSPF的配置实例(单区域+多区域)

华为[ENSP]OSPF的配置实例(单区域+多区域)

weixin_62594100的博客 2万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

PAT (Top Level) Practise 1010 Lehmer Code (35)

1010. Lehmer Code (35) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 LIU, Yaoting According to Wikipedia: "In mathematics and

Occult 1300

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

PAT (Top Level) Practice 1010 Lehmer Code (35)(35 分)

1010 Lehmer Code (35)(35 分) According to Wikipedia: “In mathematics and in particular in combinatorics, the Lehmer code is a particular way to encode each possible permutation of a sequence of n numb...

darknight 404

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

1010. Lehmer Code (35)解题报告

思路 同PAT TOP 1009一样,都是用树状数组解决,只不过这一题要用到离散化。 通过画面 代码 #define _CRT_SECURE_NO_WARNINGS #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define lowbit(x) ((x)&amp;(-x)) const int maxn = static_cast...

信道者 655

PAT-2021年春季考试-顶级题解

前言: 非常热乎的题解,嘿嘿。以往难度不知道(没刷过他们的题库),感觉这次顶级难度真不高啊,,可能是题目难读的原因嘛?之前听cy姥姥吹的那么nb。没想到还是比较简单,唯一难读的就是题意,比较绕。 A.共享单车回收:Floyd,模拟 题目大意: 给你一张含(n+1)(n+1)(n+1)个点(编号0,1,2,...,n0,1,2,...,n0,1,2,...,n)mmm条边的带边权无向图。从0点出发。每次选择尚未访问过的节点中最短路径最短的点,去往那里。以此往复。直到无点可走。 第一行输出访问节点的路径. 第二

qq_35577488的博客 1754

1010 Lehmer Code (35 分)(思路+详解+树状数组的学习+逆序对

这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!成功只会留给那些有准备的人!一个人可以走的很快,但一群人才能走的更远。

2401_84102864的博客 743

pat顶级题解目录

pat顶级题解目录 github源码地址:https://github.com/richenyunqi/pat-problem-solution-directory ,撒娇打滚求star哦~~ღ( ´・ᴗ・` )比心 编号 标题 题解 分类 备注 ...

日沉云起的博客 5907

PAT(Programming Ability Test)等级,可以基本对应程序能力

PAT(Programming Ability Test)等级,可以基本对应程序能力

无尽星空--帝王铠 1万+

1010. Lehmer Code (35)

According to Wikipedia: "In mathematics and in particular in combinatorics, the Lehmer code is a particular way to encode each possible permutation of a sequence of n numbers." To be more specific,

大胖子狗的博客 799

PAT-顶级 1021 Safe Fruit (35 分)(可能是目前全网最快的版本)

PAT-顶级 1021 Safe Fruit (35 分) 1. 思路: 起名叫最大团问题,实际上没有这么一个算法。基本上就是暴力搜索加剪枝,dfs的思路。并不需要 遍历节点,依次考察第i个节点加入团所能得到的最大团。 每加入一个节点就更新当前不安全水果集合,加入时考察当前水果是否与篮子中水果相克 (或者按照图的思路,在加入新节点时才考察是否合法,不引入不安全水果集合的概念。) 剪枝思路: 1.不考察重复团,因此要给加入团的节点编序号,按增序排列,因此在考察第i个节点时,只有 【i+1,n】号节点可以加入团

sdt1347的博客 2185

PAT 顶级 1010 Lehmer Code (35 分)

思路: 1.这道题实际上就是计算逆序数,而计算逆序数有两种方法: (1)运用树状数组(Binary Indexed Tree)计算; (2)通过分治思想利用归并排序计算; 这里的代码仅展示第一种,虽然后一种也很简单; 2.注意直接使用BIT是不可取的,因为题目并没有说明Ai的范围,不可以直接将a[i]加入到BIT中,此时我们需要计算每一个a[i]的排名,将a[i]的排名加入进去就好了~ 代码: #...

Yuhan的博客 350
下一篇: PAT-Advanced 1110. Complete Binary Tree (25)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值