[二分 ST表] HihoCoder #1469 Challenge 27 福字
来源:互联网 发布:豆瓣fm for mac 编辑:程序博客网 时间:2024/06/09 16:04
这个只要枚举左上角 然后二分最大值 xjb搞一下就好了
#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}inline void read(int &x){ char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;}const int N=1005;const int K=12;struct ST{ int st[N][K],Log[N]; inline void Pre(int *a,int n){ for (int i=2;i<=n;i++) Log[i]=Log[i>>1]+1; for (int i=1;i<=n;i++) st[i][0]=a[i]; for (int k=1;k<K;k++) for (int i=1;i<=n;i++) { st[i][k]=st[i][k-1]; if (i+(1<<(k-1))<=n) st[i][k]=min(st[i][k],st[i+(1<<(k-1))][k-1]); } } inline int Query(int l,int r){ int t=Log[r-l+1]; return min(st[l][t],st[r-(1<<t)+1][t]); } }B[N],C[N];inline bool check(int x,int y,int k){ return C[x].Query(y,y+k-1)>=k && B[y].Query(x,x+k-1)>=k;}int n;int a[N][N];int b[N][N],c[N][N];int main(){ freopen("t.in","r",stdin); freopen("t.out","w",stdout); read(n); for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) read(a[i][j]); for (int i=1;i<=n;i++){ b[i][n]=1; int cnt=1; for (int j=n-1;j;j--){ if (a[i][j]==a[i][j+1]-1) cnt++; else cnt=1; b[i][j]=cnt; } } for (int i=1;i<=n;i++) for (int j=1;j<i;j++) swap(b[i][j],b[j][i]); for (int j=1;j<=n;j++){ c[n][j]=1; int cnt=1; for (int i=n-1;i;i--){ if (a[i][j]==a[i+1][j]-1) cnt++; else cnt=1; c[i][j]=cnt; } } int ans=0; for (int i=1;i<=n;i++) B[i].Pre(b[i],n),C[i].Pre(c[i],n); for (int i=1;i<=n;i++) for (int j=1;j<=n;j++){ int L=1,R=min(n-i+1,n-j+1)+1,MID; while (L+1<R) if (check(i,j,MID=(L+R)>>1)) L=MID; else R=MID; ans=max(ans,L); } printf("%d\n",ans); return 0;}
0 0
- [二分 ST表] HihoCoder #1469 Challenge 27 福字
- hihoCoder Challenge 27 #1469 : 福字 dp
- hihoCoder Challenge 27 #1469 : 福字 【简单dp】
- HDU 5875 二分+st表
- hdu5726 GCD st表 + 二分
- [树形DP] HihoCoder #1471 Challenge 27 拥堵的城市
- codeforces 475D CGCDSSQ ST表+二分
- hdu 5726 GCD (二分+ST表)★
- HDOJ 5726 GCD 二分+ST表
- codeforces689D Friends and Subsequences 二分+ST表
- hud 5726 GCD st表+二分
- codeforces 689D ST表+二分 模板
- HDU5289:Assignment(二分 + ST表)
- [二分 ST表 杂题] Codeforces875D. High Cry
- hihoCoder 1068 : RMQ-ST算法
- hihoCoder 1068 RMQ-ST算法
- [HihoCoder]#1068 : RMQ-ST算法
- hihocoder 1068 RMQ-ST入门
- DevExpress--外观设置
- oracle 导入导出dmp数据
- volatile的作用
- 简易版主题切换功能的实现
- HR绩效考核工具和公式-全面
- [二分 ST表] HihoCoder #1469 Challenge 27 福字
- Leetcode: longest-substring-without-repeating-characters
- COM---多线程
- Java远程通讯可选技术及原理
- c语言控制输出格式-小数点位数
- 学习JAVA的第一天 | Hello World
- 使用Quartz.net、Topshelf、wcf命名管道制作的一个c#定时任务管理程序(热插拔)
- ARM:单和多寄存器加载存储、状态寄存器、协处理、软中断、乘法、交换等汇编指令
- 我的第一次——那一夜