B. Psychos in a Line 解析(思維、單調棧)
Codeforce 319 B. Psychos in a Line 解析(思維、單調棧)
今天我們來看看CF319B
題目連結
題目
給一個數列,如果相鄰兩數,左邊大於右邊,那麼就可以殺死右邊的數字(被殺死的數字在當前一輪也可以殺右邊的數字)
求幾輪以後就沒有數字會自相殘殺了?
前言
第一眼看到就感覺會和單調棧有關,但是實在經驗不足,最後思緒被拉跑到找遞增和遞減數列了...
想法
我們都知道,單調棧最一開始就是拿來找一個元素往左或往右的,第一個比元素本身大或小的元素。
但這題還需要我們利用單調棧運行時的過程。
首先我們從數列左邊開始處理(跑單調棧找往左看第一個比自身大的),並且將第\(i\)個元素在第幾輪會被殺掉儲存為\(pre[i]\),接著注意到這件事(令第\(i\)元素往左看第一個大於的元素的index為\(j\)):\(pre[i]=\min\{i-j,[j+1,i]區段中最大的pre[.]+1\}\),其中\(i-j\)代表最慢的情況就是由左邊第一大的元素慢慢殺過來,而後者代表\([j+1,i]\)這一段都被殺完以後,下一個就是自己被殺。
而重點就在於尋找\([j+1,i]區段中最大的pre[.]\)可以在stack pop的同時計算。其原因是因為:假設目前\([j,i]\)區段已經有一些元素被pop走了,剩下等著還沒pop的元素當然有可能是最大值,要計入考慮,而這些剩下的元素都已經計算過\(pre[i']=\min\{i'-j',[j'+1,i']區段中最大的pre[.]+1\}\),又,\(i'-j'\ge[j'+1,i']區段中最大的pre[.]+1\)。所以只要計算還在stack中的最大值,就等於整個\([j+1,i]\)區間的最大值了。
最後只要輸出\(pre[.]\)中的最大值就好。
程式碼:
const int _n=1e5+10;
int t,n,a[_n];
int pre[_n];
main(void) {ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;rep(i,0,n)cin>>a[i];
stack<int> s;rep(i,0,n){
while(!s.empty() and a[s.top()]<a[i]){
pre[i]=max(pre[i],pre[s.top()]);s.pop();
}
pre[i]=min(s.empty()?0:i-s.top(),pre[i]+1);
s.push(i);
}int maxx=-1e9;rep(i,0,n)maxx=max(maxx,pre[i]);
cout<<maxx<<'\n';
return 0;
}
標頭、模板請點Submission看
Submission
B. Psychos in a Line 解析(思維、單調棧)的更多相关文章
- A. Arena of Greed 解析(思維)
Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...
- E. Almost Regular Bracket Sequence 解析(思維)
Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...
- C2. Power Transmission (Hard Edition) 解析(思維、幾何)
Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維.幾何) 今天我們來看看CF1163C2 題目連結 題目 給一堆點,每兩個點會造成一 ...
- F. Moving Points 解析(思維、離散化、BIT、前綴和)
Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...
- B. Two Arrays 解析(思維)
Codeforce 1417 B. Two Arrays 解析(思維) 今天我們來看看CF1417B 題目連結 題目 略,請直接看原題. 前言 a @copyright petjelinux 版權所有 ...
- C. k-Amazing Numbers 解析(思維)
Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...
- D. Road to Post Office 解析(思維)
Codeforce 702 D. Road to Post Office 解析(思維) 今天我們來看看CF702D 題目連結 題目 略,請直接看原題. 前言 原本想說會不會也是要列式子解或者二分搜,沒 ...
- C. Bank Hacking 解析(思維)
Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...
- B. Kay and Snowflake 解析(思維、DFS、DP、重心)
Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...
随机推荐
- 在Linux系统下搭建和配置一个minio文件服务器(二)
上一篇主要讲述了在linux系统中搭建一个minio文件服务器,那么这一篇则用来整合java代码中使用,我之前自己已经搭建好了一个springboot项目,那么这一篇将详细讲述如何把minio整合进s ...
- Java 内功修炼 之 数据结构与算法(一)
一.基本认识 1.数据结构与算法的关系? (1)数据结构(data structure): 数据结构指的是 数据与数据 之间的结构关系.比如:数组.队列.哈希.树 等结构. (2)算法: 算法指的是 ...
- Centos-获取远程主机对应端口信息-telnet
telnet 通过 telnet协议与远程主机通信或者获取远程主机对应端口信息 格式 telnet URL/IP port
- Centos-当前和过去登入系统用户信息-last
last 获取当前和过去登入系统的用户相关信息,执行last指令的时候会默认读取/var/log/wtmp文件 相关参数 -a 把客户端IP显示到最后一列 -R 不显示客户端IP地址或主机名 -n 显 ...
- 理解RESTful:理论与最佳实践
什么是 REST 什么是 RESTful Richardson 成熟度模型 RESTful API 设计最佳实践 补充:HTTP 状态码及说明 什么是 REST REST 一词,是由 HTTP 协议的 ...
- mysql-3-orderby
#进阶3:排序查询 /* 语法: SELECT FROM WHERE ORDER BY ASC|DESC */ USE myemployees; #案例1:查询员工信息,按工资从高到低排 SELECT ...
- GOOGLE工作法(世界一速)|木深读书笔记
- 生成器generator和迭代器Iterator
一.列表生成式 在学习生成器迭代器之前先了解一下什么是列表生成式,列表生成式是Python内置的非常简单却强大的可以用来创建list的生成式.什么意思?举个例子,如果想生成列表[0,1,2 ...
- ansible-初始playbook安装nginx
1. ansible-初始playbook安装nginx 1) 创建一个ansible存放路径 1 [root@test-1 scripts]# mkdir -p /ansible/nginx/{co ...
- ie 版本判断脚本
// 获取IE版本 /** * @return {string} */ function IEVersion() { // 取得浏览器的userAgent字符串 var userAgent = nav ...