chenfy27的刷题记录

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

abc372D Buildings

N幢楼排成一行,第i号楼的高度为H[i]。对于每幢楼,右边有多少幢楼满足两楼之间的楼高都不超过右侧楼高?
1<=N<=2E5, 1<=H[i]<=N, H[i]!=Hj

分析:单调栈求出各幢楼左边最近的比它高的楼,对于j号楼,假设它左边最近的比它高的楼号为i,那么j对区间[i,j-1]中每个下标都有1的贡献,可以用差分来维护。

#include <bits/stdc++.h>
using i64 = long long;
void solve() {
int N;
std::cin >> N;
std::vector<int> H(N + 2);
for (int i = 1; i <= N; i++) {
std::cin >> H[i];
}
std::vector<int> L(N + 2), s;
for (int i = 1; i <= N; i++) {
while (!s.empty() && H[s.back()] <= H[i]) {
s.pop_back();
}
L[i] = s.empty() ? 0 : s.back();
s.push_back(i);
}
std::vector<int> A(N + 2);
for (int i = 1; i <= N; i++) {
A[L[i]] += 1;
A[i] -= 1;
}
std::partial_sum(A.begin(), A.end(), A.begin());
for (int i = 1; i <= N; i++) {
std::cout << A[i] << " \n"[i == N];
}
}
int main() {
std::cin.tie(0)->sync_with_stdio(0);
int t = 1;
while (t--) solve();
return 0;
}

posted on   chenfy27  阅读(9)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示