【Luogu】P1169棋盘制作(单调栈)
唉……这种题放在NOIP以前我是会做的……但是为什么现在反而不会了……
单调栈。预处理每个点向上能扩展的最大距离,左右用两遍单调栈扫一遍。注意边界。
- #include<cstdio>
- #include<cstdlib>
- #include<algorithm>
- #include<cstring>
- #include<cctype>
- using namespace std;
- inline long long read(){
- long long num=,f=;
- char ch=getchar();
- while(!isdigit(ch)){
- if(ch=='-') f=-;
- ch=getchar();
- }
- while(isdigit(ch)){
- num=num*+ch-'';
- ch=getchar();
- }
- return num*f;
- }
- int q[][];
- int d[][][];
- int w[];int s[];
- int stack[],top;
- int ans;
- int cnt;
- int main(){
- int n=read(),m=read();
- for(int i=;i<=n;++i)
- for(int j=;j<=m;++j){
- q[i][j]=read()^((i+j+)%);
- int now=q[i][j];
- d[i][j][now]=q[i-][j]==now?d[i-][j][now]+:;
- }
- for(int i=;i<=n;++i){
- memset(w,,sizeof(w)); top=;
- for(int j=;j<=m;++j){
- w[j]=j;
- while(top&&d[i][stack[top]][]>d[i][j][]) w[stack[top--]]=j-;
- stack[++top]=j;
- }
- //while(top) w[stack[top--]]=n;
- memset(s,,sizeof(s)); top=;
- for(int j=m;j>=;--j){
- s[j]=j;
- while(top&&d[i][stack[top]][]>d[i][j][]) s[stack[top--]]=j+;
- stack[++top]=j;
- }
- //while(top) s[stack[top--]]=1;
- for(int j=;j<=m;++j){
- ans=max(ans,(w[j]-s[j]+)*d[i][j][]);
- int MIN=min(w[j]-s[j]+,d[i][j][]);
- cnt=max(cnt,MIN*MIN);
- }
- }
- for(int i=;i<=n;++i){
- memset(w,,sizeof(w)); top=;
- for(int j=;j<=m;++j){
- w[j]=j;
- while(top&&d[i][stack[top]][]>d[i][j][]) w[stack[top--]]=j-;
- stack[++top]=j;
- }
- //while(top) w[stack[top--]]=n;
- memset(s,,sizeof(s)); top=;
- for(int j=m;j>=;--j){
- s[j]=j;
- while(top&&d[i][stack[top]][]>d[i][j][]) s[stack[top--]]=j+;
- stack[++top]=j;
- }
- //while(top) s[stack[top--]]=1;
- for(int j=;j<=m;++j){
- ans=max(ans,(w[j]-s[j]+)*d[i][j][]);
- int MIN=min(w[j]-s[j]+,d[i][j][]);
- cnt=max(cnt,MIN*MIN);
- }
- }
- printf("%d\n%d",cnt,ans);
- return ;
- }
【Luogu】P1169棋盘制作(单调栈)的更多相关文章
- bzoj 1057: [ZJOI2007]棋盘制作 单调栈
题目链接 1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 1019[Submit] ...
- [ZJOI2007]棋盘制作 (单调栈)
[ZJOI2007]棋盘制作 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8 \times 88×8大小的黑白相间 ...
- BZOJ1057[ZJOI2007]棋盘制作 [单调栈]
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我们的 ...
- [ZJOI2007]棋盘制作 (单调栈,动态规划)
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个 8 \times 88×8 大小的黑白相间的方阵,对应八八六十四卦, ...
- luogu1169 棋盘制作 (单调栈)
先预处理出来从每个位置 以0开始 往右交替最多能放多少格 然后就相当于对每一列做HISTOGRA #include<bits/stdc++.h> #define pa pair<in ...
- [P1169] 棋盘制作 &悬线法学习笔记
学习笔记 悬线法 最大子矩阵问题: 在一个给定的矩形中有一些障碍点,找出内部不包含障碍点的,边与整个矩形平行或重合的最大子矩形. 极大子矩型:无法再向外拓展的有效子矩形 最大子矩型:最大的一个有效子矩 ...
- luogu 1169 棋盘制作(单调栈/悬线)
luogu 1169 棋盘制作(单调栈/悬线) 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应 ...
- luogu 3467 [POI2008]PLA-Postering 单调栈
题目描述: Description N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. Input 第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的 ...
- 洛谷P1169 棋盘制作(悬线法)
题目链接:https://www.luogu.org/problemnew/show/P1169 #include<bits/stdc++.h> #define fi first #def ...
随机推荐
- 抓取GridView "编辑"模式下,TextBox修改后的数值
[FAQ]抓取GridView "编辑"模式下,TextBox修改后的数值 -- ASP.NET专题实务「上集」Ch.10 抓取GridView "编辑"模式下 ...
- 【转载】Cesium基础使用介绍
既然给我发了参与方式,不参加似乎有点不给人面子,反正也没多少人看我的博客,那我就试试吧,也欢迎大家自己参与:2017年度全网原创IT博主评选活动投票:http://www.itbang.me/goVo ...
- HDU 5452 Minimum Cut (Spaning Tree)
生成树的上的一个非根结点对应一条生成树上的边,然后这个结点的子树上连出去的边就对应去掉这条边的割, 然后就可以对树外的边求LCA,在LCA上标记,利用这个信息可以算出有多少条边在子树上,以及有多少条边 ...
- IOS CoreData 多表查询(下)
http://blog.csdn.net/fengsh998/article/details/8123392 在iOS CoreData中,多表查询上相对来说,没有SQL直观,但COREDATA的功能 ...
- mybatis(一):思维导图
- python_100_静态方法
class Dog(object): def __init__(self,name): self.name=name @staticmethod#实际上跟类没什么关系了 def eat():#def ...
- 【转】Popclip的JSON格式化扩展
http://liuyunclouder.github.io/2016/09/29/JSONizer:Popclip的JSON格式化扩展 作为一个MAC党,不好好利用MAC的神兵利器,简直就是罪过.A ...
- 从输入url到页面加载完成发生了什么详解
这是一道经典的面试题,这道题没有一个标准的答案,它涉及很多的知识点,面试官会通过这道题了解你对哪一方面的知识比较擅长,然后继续追问看看你的掌握程度.当然我写的这些也只是我的一些简单的理解,从前端的角度 ...
- sqlite 新建实体时出错
解决方式 手动下载 问题原因
- nodejs 静态资源服务与接口代理跨域
首先需要 npm install express 和 npm install request 代码如下: const express = require('express'); const path ...