E - Excellent Views

Problem - E - Codeforces

问题描述:数组H大小都不相同。从i到j是可行的,当且仅当
不存在 k ,使 ∣ i − k ∣ ≤ ∣ i − j ∣ , H k > H j 不存在k,使 \\ |i - k| \leq |i - j|, \quad H_k > H_j 不存在k,使ikij,Hk>Hj

暴力 O(n * n),从当前点向两边进行扩散。

void solve() {int n;cin>>n;for(int i = 1; i <= n; ++i) cin>>a[i];for(int i = 1; i <= n; ++i) {int ma = -INF;int cnt = 0;int len = max(i - 1, n - i);for(int j = 0; j <= len; ++j) {int lvidx = i - j, rvidx = i + j;if(lvidx < 1) {ma = max({ma, a[rvidx]});if(a[rvidx] >= ma) cnt++;} else {ma = max({ma, a[lvidx], a[rvidx]});if(a[lvidx] >= ma) cnt++;if(a[rvidx] >= ma) cnt++;}}cout<<cnt - 2<<" ";}
}

优化:单调栈,对于i算出到左边和到右边第一个大于下标为i的元素值得长度或下标,用差分对半记录即可。

代码:

#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <set>
#include <map>
#include <queue>
#include <ctime>
#include <random>
#include <sstream>
#include <stack>
#include <numeric>
#include <stdio.h>
#include <functional>
#include <bitset>
#include <algorithm>
using namespace std;// #define Multiple_groups_of_examples
#define IOS std::cout.tie(0);std::cin.tie(0)->sync_with_stdio(false);
#define dbgnb(a) std::cout << #a << " = " << a << '\n';
#define dbgtt cout<<" !!!test!!! "<<endl;
#define rep(i,x,n) for(int i = x; i <= n; i++)#define all(x) (x).begin(),(x).end()
#define pb push_back
#define vf first
#define vs secondtypedef long long LL;
typedef pair<int,int> PII;
/*** https://codeforces.com/gym/103185/problem/E* 题意:对每一个i找到满足条件的j, 其中条件为:不存在k, 使 abs(i - k) <= abs(i - j) && Hj  < Hk 成立* 解法:std:https://github.com/Diego1149/ICPC-Latam-2020 (好像是用线段树写的*      other:https://blog.csdn.net/m0_53807008/article/details/119065842* * 思路:单调栈*      两次单调栈。这里为了简单,假设 1 <= i < j <= n*      第一次找 对于j来说,从i到j中满足条件的元素(这里j是题意中的i。*      第二次找,对于i来说,从i到j中满足条件的元素(这里i就是题意中的i。* e.g. 下标:      ... 符合条件的  i  符合条件的 ...*      对于第一次来说:*          比a[i]小的最大元素(记为A)下标找到,将比a[i]小的最大元素下标对应得pre数组赋值 i - 1,表示,最后一个小于A的下标位置。*          对于那个最大元素下标(记为idx),使 idx 对应的元素可以worth的长度为 [idx, i - 1]的一半。*          记录用差分记录即可。*      第二次,倒着来一边,同第一次。
*/
const int INF = 0x3f3f3f3f;
const int N = 2e5 + 21;
int a[N];
int pre[N], suf[N];
int lef[N], rig[N];
void inpfile();
void solve() {int n; cin>>n;for(int i = 1; i <= n; ++i) cin>>a[i];a[n+1] = INF; // 让 n + 1 等于inf, 0 等于inf,因为要让所以的都出栈stack<int> sk;// 考虑a[i]对左边的贡献sk.push(1);for(int i = 2; i <= n+1; ++i) {// 如果当前 H 大于 上一个H,将上一个H对应的下标进行记录while(sk.size() && a[i] > a[ sk.top()]) {pre[ sk.top()] = i - 1; // 将i - 1进行赋值,表示到i - 1 ,大于的条件一直是成立的sk.pop();}sk.push(i);}for(int i = 1; i <= n; ++i) {lef[i+1]++; // 将i + 1 先进行++,表示有一个贡献if(pre[i] != n) // 如果等于n,表示,恒成立,不用--,// 否则,只能到达 (i + pre[i]) / 2 的下标,利用差分 就是 [ r + 1]--lef[ (i + pre[i]) / 2 + 1]--;}// 考虑a[i]对右边的贡献// 思路及代码同上sk.push(n);a[0] = INF;for(int i = n - 1; i >= 0; --i) {while(sk.size() && a[i] > a[ sk.top()]) {suf[ sk.top()] = i + 1;sk.pop();}sk.push(i);}for(int i = 1; i <= n; ++i) {rig[i-1]++;if(suf[i] != 1)rig[ (i + suf[i] + 1) / 2 - 1]--;}// 差分前缀和for(int i = 1; i <= n; ++i) lef[i] += lef[i-1];for(int i = n; i >= 1; --i) rig[i] += rig[i+1];for(int i = 1; i <= n; ++i) cout<<lef[i] + rig[i]<<" ";
}
int main()
{#ifdef Multiple_groups_of_examplesint T; cin>>T;while(T--)#endifsolve();return 0;
}
void inpfile() {#define mytest#ifdef mytestfreopen("ANSWER.txt", "w",stdout);#endif
}

Gym - 103185E E - Excellent Views_流锡的博客-CSDN博客

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

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

相关文章

华为云渲染实践

// 编者按&#xff1a;云计算与网络基础设施发展为云端渲染提供了更好的发展机会&#xff0c;华为云随之长期在自研图形渲染引擎、工业领域渲染和AI加速渲染三大方向进行云渲染方面的探索与研究。本次LiveVideoStackCon 2023上海站邀请了来自华为云的陈普&#xff0c;为大家分…

【sql】MongoDB 查询 高级用法

【sql】MongoDB 查询 高级用法 一、基本查询指定字段 db.getCollection(students).find({}, {name: 1, score: 1}) 二、指定字段别名 db.getCollection(students).find({}, {"name":1, "score":1, "grade":"$grade.grade"}) 这里将…

【ag-grid-vue】column

网格中的每一列都使用列定义(ColDef)来定义。列根据在网格选项中指定的列定义的顺序在网格中定位。 列定义 下面的例子展示了一个定义了3列的简单网格: <template><ag-grid-vuestyle"height: 300px; width: 1000px"class"ag-theme-balham":colum…

集群路由策略

路由策略 1.第一个&#xff1a;当选择该策略时&#xff0c;会选择执行器注册地址的第一台机器执行&#xff0c;如果第一台机器出现故障&#xff0c;则调度任务失败。 2.第二个&#xff1a;当选择该策略时&#xff0c;会选择执行器注册地址的第二台机器执行&#xff0c;如果第二…

自动化的驱动力,工控机助您实现智能生产!

“智能工厂建设如火如荼&#xff0c;部分成果已经落地&#xff0c;在大规模资金投入的市场催化下&#xff0c;海尔、海信等制造企业通过智能工厂手段推进生产效率成倍增长的新闻层出不穷。在工业4.0时代&#xff0c;“中国制造2025”战略中&#xff0c;智能工厂构建都是其中不可…

【KMP算法-代码随想录】

目录 1.什么是KMP2.什么是next数组3.什么是前缀表&#xff08;1&#xff09;前后缀含义&#xff08;2&#xff09;最长公共前后缀&#xff08;3&#xff09;前缀表的必要性 4.计算前缀表5.前缀表与next数组&#xff08;1&#xff09;使用next数组来匹配 6.构造next数组&#xf…

1.linux的常用命令

目录 一、Linux入门 二、Linux文件系统目录 三、Linux的vi和vim的使用 四、Linux的关机、重启、注销 四、Linux的用户管理 五、Linux的运行级别 六、Linux的文件目录指令 七、Linux的时间日期指令 八、Linux的压缩和解压类指令 九、Linux的搜索查找指令 ​​​​​​…

windows可视化界面管理服务器上的env文件

需求&#xff1a;在 Windows 环境中通过可视化界面编辑位于 Linux 主机上的 env 文件的情况&#xff0c;我现在环境是windows环境&#xff0c;我的env文件在linux的192.168.20.124上&#xff0c;用户是op&#xff0c;密码是op&#xff0c;文件绝对路径是/home/op/compose/env …

无涯教程-PHP - 性能优化

根据Zend小组的说明,以下插图显示了PHP 7与PHP 5.6和基于流行的基于PHP的应用程序上的HHVM 3.7。 Magento 1.9 与执行Magento事务的PHP 5.6相比&#xff0c;PHP 7的运行速度证明是其两倍。 Drupal 7 在执行Drupal事务时&#xff0c;与PHP 5.6相比&#xff0c;PHP 7的运行速度…

SQL 大小敏感问题

在SQL中&#xff0c;关键字和函数名 是不区分 大小写的 比如&#xff08;select、where、order by 、group by update 等关键字&#xff09;&#xff0c;以及函数(ABS、MOD、round、min等) window系统默认是大小写不敏感 &#xff08;ZEN文件和zen 文件 不能同时存在&#xff…

fckeditor编辑器的两种使用方法

需要的资源包我放我资源里了&#xff0c;不要积分 https://download.csdn.net/download/wybshyy/88245895 首先把FredCK.FCKeditorV2.dll添加到引用 具体方法如下&#xff0c;一个是客户端版本&#xff0c;一个是服务器端版本 客户端版本&#xff1a; <% Page Language…

【vue3+ts项目】配置husky+配置commitlint

上一篇文章中配置了eslint校验代码工具 【vue3ts项目】配置eslint校验代码工具&#xff0c;eslintprettierstylelint 1、配置husky 每次手动执行命令才能格式化代码&#xff0c;如果有人没有格式化就提交到远程仓库&#xff0c;这个规范就起不到作用了&#xff0c;所有需要强…

Arcgis colorRmap

arcgis中colorRmap对应的名称&#xff1a; 信息来源&#xff1a;https://developers.arcgis.com/documentation/common-data-types/raster-function-objects.htm 在arcpy中使用方法&#xff1a; import arcpy cr arcpy.mp.ColorRamp("Yellow to Red")python中 ma…

wqs二分

前提&#xff1a;答案满足凸性 题目类似为 n n n 个里面选 m m m 个求某种代价&#xff0c;暴力二维dp复杂度大&#xff0c;但容易计算不限制选的次数。 由于不限制选的次数&#xff0c;所以给选一个东西给一个代价 v v v&#xff0c;然后判断最后选了多少个&#xff0c;再…

leetcode做题笔记93. 复原 IP 地址

有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xff0c;但是 "0.011.255.2…

Docker(md版)

Docker 一、Docker二、更换apt源三、docker搭建四、停启管理五、配置加速器5.1、方法一5.2、方法二 六、使用docker运行漏洞靶场1、拉取tomcat8镜像2、拉取成功3、开启服务4、查看kali的IP地址5、访问靶场6、关闭漏洞靶场 七、vulapps靶场搭建 一、Docker Docker是一个开源的应…

VUE3添加全局变量

全局变量的添加 在vue3.0中注入全局方法不是在prototype上挂载了&#xff0c;而是添加在config.globalProperties属性上。 //main.js import { createApp } from "vue"; import App from "./App.vue";const app createApp(App); app.config.globalPrope…

2023国赛数学建模思路 - 案例:随机森林

文章目录 1 什么是随机森林&#xff1f;2 随机深林构造流程3 随机森林的优缺点3.1 优点3.2 缺点 4 随机深林算法实现 建模资料 ## 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是随机森林&#xff…

使用 DPO 微调 Llama 2

简介 基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback&#xff0c;RLHF) 事实上已成为 GPT-4 或 Claude 等 LLM 训练的最后一步&#xff0c;它可以确保语言模型的输出符合人类在闲聊或安全性等方面的期望。然而&#xff0c;它也给 NLP 引入了一些 RL 相关…

python网络编程

文章目录 socket套接字客户端/服务模型linux文件描述符fdLinux网络IO模型详解网络服务器Apache VS Nginx生产者消费者-生成器版客户端/服务端-多线程版IO多路复用TCPServer模型异步IO多路复用TCPServer模型 socket套接字 套接字&#xff08;socket&#xff09;是抽象概念,表示T…