news 2026/6/23 2:43:30

题解:AT_abc436_f

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
题解:AT_abc436_f

题面

Starry Landscape Photo

问题描述

AtCoder行星上看到的夜空中,有N NN颗星星,这些星星从东到西排成一条直线。从东方数起的第i ii颗星(1 ≤ i ≤ N 1 \le i \le N1iN)是这些星星中第B i B _ iBi亮的。

Takahashi决定按照以下步骤拍摄夜空的照片:

1.选择一对整数(l , r l , rl,r),满足1 ≤ l ≤ r ≤ N 1 \le l \le r \le N1lrN,并设置相机,使得从东数起的第l ll、第l + 1 l + 1l+1… \dots、第r rr颗星都能进入画面,而其他星星不会进入画面。

2.选择一个整数b bb,满足1 ≤ b ≤ N 1 \le b \le N1bN,打开快门,使得所有亮度排名在第1 11到第b bb位之间(且位于画面中的)星星被捕捉,而其他星星不会被捕捉。

但是,他不能拍摄不包含任何星星的照片。

求出在这种方式下拍摄的照片中,可以捕捉到的不同星星集合的数量。

约束条件

1 ≤ N ≤ 5 × 1 0 5 1 \le N \le 5 \times 10 ^ 51N5×105

1 ≤ B i ≤ N 1 \le B _ i \le N1BiN1 ≤ i ≤ N 1 \le i \le N1iN

B i ≠ B j B _ i \neq B _ jBi=Bj1 ≤ i < j ≤ N 1 \le i < j \le N1i<jN

所有输入值都是整数。

输入

输入通过标准输入给出,格式如下:

N NN
B 1 B 2 … B N B _ 1 \ B _ 2 \ \dots \ B _ NB1B2BN

输出

输出答案。

思路

tag \text{tag}tag数学树状数组

根据题意,易知一张照片由左端点、右端点与感光度(照片中最暗亮度值)决定。令pos i \text{pos} _ iposi为亮度为i ii的星星的位置,则满足i ∈ [ 1 , N ] i \in [1 , N]i[1,N]的三元数对( l , r , pos i ) (l , r , \text{pos} _ i)(l,r,posi),其l llr rr取值分别有L i L _ iLiR i R _ iRi种,其中L i L _ iLi为同时满足j ≤ pos i j \le \text{pos} _ ijposiB j ≤ i B _ j \le iBjij jj的个数,R i R _ iRi为同时满足j ≥ pos i j \ge \text{pos} _ ijposiB j ≤ i B _ j \le iBjij jj的个数。根据乘法原理,照片种数为左端点个数与右端点个数的乘积,又因满足B j < i B _ j < iBj<ij jj的个数为i + 1 i + 1i+1个,故ans = ∑ i = 1 N L i R i = ∑ i = 1 N L i ( i + 1 − L i ) \text{ans} = \sum _ {i = 1} ^ {N} L _ i R _ i = \sum _ {i = 1} ^ {N} L _ i (i + 1 - L _ i)ans=i=1NLiRi=i=1NLi(i+1Li)

由于1 ≤ N ≤ 5 × 1 0 5 1 \le N \le 5 \times 10 ^ 51N5×105,所以需在O ( log ⁡ 2 N ) O(\log _ 2 N)O(log2N)时间内求出每个i iiL i L _ iLi。考虑用树状数组。令i ii为升序,则每次计算时,在pos i \text{pos} _ iposi处增加一个星星,并计算位置小于等于pos i \text{pos} _ iposi的个数,即L i L _ iLi

预处理pos \text{pos}pos需要O ( N ) O(N)O(N),树状数组O ( N log ⁡ 2 N ) O(N \log _ 2 N)O(Nlog2N),总时间复杂度O ( N log ⁡ 2 N ) O(N \log _ 2 N)O(Nlog2N)

代码

#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintmaxn=5e5;intb[maxn+5];intpos[maxn+5];intk[maxn*2+5];intn;intans=0;intlowbit(intx){returnx&(-x);}voidadd(intx){for(;x<=maxn*2;x+=lowbit(x)){k[x]++;}}intquery(intx){intres=0;for(;x;x-=lowbit(x)){res+=k[x];}returnres;}voidsolve(){cin>>n;for(inti=1;i<=n;i++){cin>>b[i];pos[b[i]]=i;}for(inti=1;i<=n;i++){add(pos[i]);inttmp=query(pos[i]);ans+=tmp*(i-tmp+1);}cout<<ans<<"\n";}signedmain(){intt=1;while(t--){solve();}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 12:18:09

leetcode 2147. 分隔长廊的方案数 困难

在一个图书馆的长廊里&#xff0c;有一些座位和装饰植物排成一列。给你一个下标从 0 开始&#xff0c;长度为 n 的字符串 corridor &#xff0c;它包含字母 S 和 P &#xff0c;其中每个 S 表示一个座位&#xff0c;每个 P 表示一株植物。在下标 0 的左边和下标 n - 1 的右边 已…

作者头像 李华
网站建设 2026/6/23 21:02:14

学生党必备!这款桌面课表工具太省心了

上课前翻遍手机找课表&#xff1f;担心走神错过上课时间&#xff1f;对于学生党和老师来说&#xff0c;一款顺手的课表工具能省不少事&#xff01;今天电脑天空要给大家安利的「桌面课表 Class Widget」&#xff0c;就是这样一款精准解决课程管理痛点的桌面小工具。它最戳人的点…

作者头像 李华
网站建设 2026/6/23 21:02:23

深度学习实验14代码

实验前准备 数据集 # make data import random import numpy as np import os # 固定随机种子 random.seed(0) np.random.seed(0)def generate_data(length, k, save_path):if length < 3:raise ValueError("The length of data should be greater than 2.")if k …

作者头像 李华
网站建设 2026/6/23 22:16:52

优化及性能-–-behaviac

原文 优化及性能 宏BEHAVIAC_RELEASE定义的时候是最终版&#xff0c;BEHAVIAC_RELEASE没有定义的时候是为开发版。 在debug版中&#xff0c;BEHAVIAC_RELEASE缺省下没有定义的。诸如logging、socketing、热加载等开发功能是有效的。可以通过behaviac::Config::IsLogging和be…

作者头像 李华
网站建设 2026/6/23 8:04:13

练题100天——DAY26:汇总区间+丢失的数字+数组交集

今天又又是三道题&#xff0c;难度范围&#xff1a;★★~★★★。难度完全是凭个人做的感觉标的&#xff0c;题还是得自己做了才知道。 100天也已经过1/4了&#xff0c;非常之不错啊&#xff0c;希望这些记录能让我对这些题的理解更深&#xff0c;当然&#xff0c;也希望能对你…

作者头像 李华
网站建设 2026/6/23 22:17:15

当AI芯片不再性感:博通的高增长,为何成了催命符?

出品I下海fallsea撰文I胡不知2025年12月12日16点03分&#xff0c;纳斯达克交易大厅的电子屏突然泛起红光。博通&#xff08;AVGO.US&#xff09;的股价在连续30分钟的抛售潮中直线下坠&#xff0c;从开盘402美元跌至357美元&#xff0c;单日跌幅最终定格在11.2%&#xff0c;市值…

作者头像 李华