[bzoj1113]海报
2024-10-19 15:33:30
ans肯定不会超过n,因为我们可以每一列都放一个矩阵
考虑减小答案,肯定是要放横的,也就是让两个高度一样的矩阵同时被消除掉,那么中间不能存在比他们低的矩阵
问题即判断一个点之前第一个小于等于它的点是不是等于他(等于就ans-1),然后用单调栈维护之前的递减即可
1 #include<bits/stdc++.h>
2 using namespace std;
3 int n,ans,a[300005],s[300005];
4 int main(){
5 scanf("%d",&n);
6 for(int i=1;i<=n;i++)scanf("%*d%d",&a[i]);
7 for(int i=1;i<=n+1;i++){
8 while ((s[0])&&(s[s[0]]>=a[i]))
9 if (s[s[0]--]==a[i])ans++;
10 s[++s[0]]=a[i];
11 }
12 printf("%d",n-ans);
13 }
最新文章
- 拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc
- windows 版的julia repl 启动时间已经大大优化!
- db2死锁分析与处理
- JAVA读取XML文件数据
- 如何将vs2012项目的网站布置到iis上,实现内网访问
- 防止SQL注入和XSS攻击Filter
- JavaScript学习心得(六)
- 《第一行代码》学习笔记5-活动Activity(3)
- C语言漫谈(二) 图像显示 Windows和Linux
- C基础知识小总结(十)
- 基于Schema的AOP 配置使用详解
- 何谓集群(cluster)
- ruby安装sass报错解决办法
- 1031: [JSOI2007]字符加密Cipher
- python中将字典形式的数据循环插入Excel
- MPAndroidChart——饼图
- nginx的限流问题
- Maven打war包命令
- python 列表去重的几种方法
- adb入门学习笔记