【每日一题】|楼兰图腾(python解法)
在完成了分配任务之后,西部 314314 来到了楼兰古城的西部。
相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(V
),一个部落崇拜铁锹(∧
),他们分别用 V
和 ∧
的形状来代表各自部落的图腾。
西部 314314 在楼兰古城的下面发现了一幅巨大的壁画,壁画上被标记出了 nn 个点,经测量发现这 nn 个点的水平位置和竖直位置是两两不同的。
西部 314314 认为这幅壁画所包含的信息与这 nn 个点的相对位置有关,因此不妨设坐标分别为 (1,y1),(2,y2),…,(n,yn)(1,y1),(2,y2),…,(n,yn),其中 y1∼yny1∼yn 是 11 到 nn 的一个排列。
西部 314314 打算研究这幅壁画中包含着多少个图腾。
如果三个点 (i,yi),(j,yj),(k,yk)(i,yi),(j,yj),(k,yk) 满足 1≤i<j<k≤n1≤i<j<k≤n 且 yi>yj,yj<ykyi>yj,yj<yk,则称这三个点构成 V
图腾;
如果三个点 (i,yi),(j,yj),(k,yk)(i,yi),(j,yj),(k,yk) 满足 1≤i<j<k≤n1≤i<j<k≤n 且 yi<yj,yj>ykyi<yj,yj>yk,则称这三个点构成 ∧
图腾;
西部 314314 想知道,这 nn 个点中两个部落图腾的数目。
因此,你需要编写一个程序来求出 V
的个数和 ∧
的个数。
输入格式
第一行一个数 nn。
第二行是 nn 个数,分别代表 y1,y2,…,yny1,y2,…,yn。
输出格式
两个数,中间用空格隔开,依次为 V
的个数和 ∧
的个数。
数据范围
对于所有数据,n≤200000n≤200000,且输出答案不会超过 int64int64。
y1∼yny1∼yn 是 11 到 nn 的一个排列。
输入样例:
5
1 5 3 2 4
输出样例:
3 4
class BitTree:def __init__(self, n: int):self.n = nself.tree = [0 for _ in range(n + 1)]def lowbit(self, x: int) -> int:return x & (-x)def add(self, i: int, val: int) -> None:while i <= self.n:self.tree[i] += vali += self.lowbit(i)def query(self, i: int) -> None:res = 0while 1 <= i:res += self.tree[i]i -= self.lowbit(i)return resdef main():n = int(input())nums = list(map(int, input().split()))BT = BitTree(n) left_less = [0 for _ in range(n)]left_great = [0 for _ in range(n)]for i in range(n):x = nums[i]left_less[i] = BT.query(x - 1)left_great[i] = BT.query(n) - BT.query(x)BT.add(x, 1)for i in range(n + 1):BT.tree[i] = 0right_less = [0 for _ in range(n)]right_great = [0 for _ in range(n)]for i in range(n - 1, -1, -1):x = nums[i]right_less[i] = BT.query(x - 1)right_great[i] = BT.query(n) - BT.query(x)BT.add(x, 1)A = 0V = 0for i in range(n):A += left_less[i] * right_less[i]V += left_great[i] * right_great[i]print("{} {}".format(V, A))if __name__ == "__main__":main()
【每日一题】|楼兰图腾(python解法)相关推荐
- leetcode每日一题·救生艇问题(Python)
leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...
- 头条校招(今日头条2017秋招真题)1——python解法
题目描述 头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队.每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来.在选题之前,我们对题目进行了盲审,并定出 ...
- Python 每日一题(一元二次方程求解)
Python 每日一题:锻炼Python语法的运用,思维逻辑的锻炼,算法能力的培养. 题目: 输入一个一元二次方程的系数 a, b, c,求解方程的根. 分析: 1.一元二次方程标准形式: (a ≠ ...
- Python 每日一题(猴子吃桃问题)
Python 每日一题:锻炼Python语法的运用,思维逻辑的锻炼,算法能力的培养. 题目: 一个猴子第一天摘下若干个桃子,当即吃了1半,还不过瘾,又多吃了1个.第二天早上吃了剩下桃子的1半,以后每天 ...
- 力扣牛客每日刷题(Python解法持续更新)
力扣牛客每日刷题(持续更新) 初试结束第15天, 之前简单的处理了部分毕设方面的任务, 对接下来的学习做了个简单的规划 决定每天开始刷几道力扣题提高一下算法的理解,不能让之前学的数据结构都忘记了 每道 ...
- 你不得不看的leetcode常见题(3月份每日一题)——Python
3月快刷了一半的题想起来应该记录一下-前几天有用JAVA写的有用C++写的,但后面没有标注的都是用Python写的. 小白一枚,有不对的或者需要改进的地方恳请各位大佬批评指正! 文章目录 2020年三 ...
- LeetCode 458. Poor Pigs--智力题「小白鼠试毒」--C++,Python解法
题目地址:Poor Pigs - LeetCode There are 1000 buckets, one and only one of them is poisonous, while the r ...
- LeetCode 221. Maximal Square----动态规划--谷歌面试算法题--Python解法
题目地址:Maximal Square - LeetCode Given a 2D binary matrix filled with 0's and 1's, find the largest sq ...
- LeetCode 148. Sort List--面试算法题--C++,Python解法
LeetCode 148. Sort List–面试算法题–C++,Python解法 LeetCode题解专栏:LeetCode题解 LeetCode 所有题目总结:LeetCode 所有题目总结 大 ...
- LeetCode 93. Restore IP Addresses--面试算法题--Python解法
题目地址:Restore IP Addresses - LeetCode Given a string containing only digits, restore it by returning ...
最新文章
- 什么是时间导数(Time derivative)
- C++ Primer 5th笔记(chap 15 OOP)继承中的类作用域
- mysql特有语法_MySQL详细的基础语法
- 我家云刷android系统教程,我家云刷机教程——小白详细版(篇二)
- json web token没有哪个成分_SpringBoot 2.1.4集成JWT实现token验证
- Linux编辑只读文件
- POJ 3178 凸包+DP (巨坑)
- windows系统mysql-5.7官方绿色版zip包安装教程
- oracle数据库面试题及答案
- MSCD software disk for win vista龙帝国vista 软件光盘合集
- 科学计算机弧度,科学计算器角度换算(学生计算器怎么算角度)
- 兆,字节,位等单位转换
- springboot+nodejs+vue公寓客房预订网站
- 美通企业日报 | 洲际集团酒店将撤除一次性小包装洗护用品;新能源汽车同时面临新老质量问题...
- Notepad++添加读取十六进制插件HexEditor
- 如何使用Transformers和Tokenizers从头开始训练新的语言模型
- 差速小车的Cartographer建图
- python三维立体画_用matplotlib创建三维立体图
- 中秋节活动中奖名单公布啦!!
- 不需要到健身房的互动健身,so cool