思路:

算法一:可以n^2找出每个点的权值,然后n^2做完,预计得分10

算法二:随机找点然后每次找最高。。貌似只有10分?然而考试的时候煞笔了,边界设成inf。。

算法三:随机找几个点,然后随机爬山,听说有50~70

算法四:考虑将列分治,每次分成2部分,找出每部分边界的最大值,判断最大值左边和右边的大小,然后往大的那一边递归,预计得分70

算法五:不仅将列分治,并且将行分治,将一个n*n的矩阵划分,然后递归找,预计得分100

 #include<bits/stdc++.h>
#include"MXPOINT.h"
using namespace std;
int mp[][];
int ask(int x,int y){
if (!mp[x][y]) return mp[x][y];
else
if (x<||x>n||y>m||y<) return mp[x][y]=-;
else return mp[x][y]=ASK(x,y);
}
bool check(int x,int y){
if (mp[x][y]<=mp[x+][y]) return ;
if (mp[x][y]<=mp[x][y+]) return ;
if (mp[x][y]<=mp[x-][y]) return ;
if (mp[x][y]<=mp[x][y-]) return ;
return ;
}
pair<int,int>find(int lx,int rx,int ly,int ry){
if ((rx-lx)<=&&(ry-ly)<=){
for (int i=lx;i<=rx;i++)
for (int j=ly;j<=ry;j++)
if (check(i,j)) return make_pair(i,j);
assert();
}
int mxed=,idx,idy;
for (int i=lx-;i<=rx+;i++)
for (int j=ly-;j<=ry+;j++){
if ((int)(i>=lx&&i<=rx)+(int)(j>=ly&&j<=ry)==) continue;
if (ask(i,j)>mxed){
mxed=ask(i,j);
idx=i;
idy=j;
}
}
if (rx-lx+>ry-ly+){
int mid=(lx+rx)>>;
int mx=;
for (int i=ly;i<=ry;i++) mx=std::max(mx,ask(mid,i));
if (mx<mxed){
if (idx<mid) return find(lx,mid-,ly,ry);
else if (idx==mid) assert();
else return find(mid+,rx,ly,ry);
}
for (int i=ly;i<=ry;i++)
if (mx==ask(mid,i)){
int p1=ask(mid-,i),p2=ask(mid+,i);
if (check(mid,i)) return make_pair(mid,i);
else
if (p1>mx&&mx>p2) return find(lx,mid-,ly,ry);
else
if (p1<mx&&mx<p2) return find(mid+,rx,ly,ry);
else assert();
}
}else{
int mid=(ly+ry)>>;
int mx=;
for (int i=lx;i<=rx;i++) mx=std::max(mx,ask(i,mid));
if (mx<mxed){
if (idy<mid) return find(lx,rx,ly,mid-);
else if (idy==mid) assert();
else return find(lx,rx,mid+,ry);
}
for (int i=lx;i<=rx;i++)
if (mx==ask(i,mid)){
int p1=ask(i,mid-),p2=ask(i,mid+);
if (check(i,mid)) return make_pair(i,mid);
else
if (p1>mx&&mx>p2) return find(lx,rx,ly,mid-);
else
if (p1<mx&&mx<p2) return find(lx,rx,mid+,ry);
else assert();
}
}
}
pair<int,int> FINDMXPOINT(){
memset(mp,,sizeof mp);
return find(,,,);
}

最新文章

  1. C#多线程之基础篇1
  2. thinkphp语言包
  3. .net开发中要注意的事项
  4. mvc 分页视图 js 失效
  5. python中时间格式
  6. Windows平台下的session0创建进程的问题与解决办法
  7. 我的HttpClients工具
  8. M - Escape - HDU 3605 - (缩点+最大流SAP)
  9. 常用PHP变量输出:echo, prinf, sprintf, var_dump
  10. nyoj_1022:合纵连横(并查集删点)
  11. Pandas(python)数据处理:只对某一列DataFrame数据进行归一化
  12. 自用lca模板
  13. 【NIFI】 Apache NiFI 集群搭建
  14. SQL Server 2016新特性:数据库级别配置
  15. 【漏洞复现】Tomcat CVE-2017-12615 远程代码执行漏洞
  16. jps报process information unavailable的解决办法
  17. 【已解决】mysql连接出错:ERROR 1040 (HY000): Too many connections
  18. FPGA内部动态可重置PLL讲解(一)
  19. trigger和triggerHandler的使用
  20. MYSQL注入天书之盲注讲解

热门文章

  1. 【转】vim文件编码和乱码处理
  2. 编译不通过:提示XXXX不是类或命名空间名 的解决办法
  3. c++ 13
  4. 瑞柏匡丞:app商业价值如何体现
  5. UVA12186--树型DP
  6. STL容器是否是线程安全的
  7. 12 个 Linux 进程管理命令介绍
  8. Qt creator自定义编译运行步骤
  9. AJAX实现google搜索建议实战
  10. Dave(正方形能围成的最大点数)