根据旋转卡壳,当逆时针遍历点时,相应的最远点也逆时针转动,满足决策单调性。于是倍长成链,分治优化DP即可,复杂度O(n^2)。

 #include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
typedef long long ll;
using namespace std; const int N=,inf=1e9; int n,T,ans[N];
struct P{ int x,y,id; }a[N];
ll sqr(ll x){ return x*x; }
ll dis(P a,P b){ return sqr(a.x-b.x)+sqr(a.y-b.y); } bool chk(int i,int k1,int k2){
if (k1<i || k1>i+n) return ;
if (k2<i || k2>i+n) return ;
ll d1=dis(a[i],a[k1]),d2=dis(a[i],a[k2]);
return d1==d2 ? a[k1].id<a[k2].id : d1>d2;
} void solve(int l,int r,int L,int R){
if (l>r) return;
int mid=(l+r)>>,pos=;
rep(i,L,R) if (chk(mid,i,pos)) pos=i;
ans[mid]=pos>n ? pos-n : pos;
solve(l,mid-,L,pos); solve(mid+,r,pos,R);
} int main(){
freopen("bzoj2739.in","r",stdin);
freopen("bzoj2739.out","w",stdout);
for (scanf("%d",&T); T--; ){
scanf("%d",&n);
rep(i,,n) scanf("%d%d",&a[i].x,&a[i].y),a[i].id=i,a[n+i]=a[i];
solve(,n,,n<<);
rep(i,,n) printf("%d\n",ans[i]);
}
return ;
}

最新文章

  1. linux内存占用查看命令
  2. html5 Application Cache——加快简历二次访问速度
  3. PHP Startup: Unable to load dynamic library
  4. Nginx简单性能调优
  5. php socket connect permission denied
  6. vijosP1164 曹冲养猪
  7. 管理员把我的admin权限去掉了,那么如何获得jdk zip安装呢?这篇可以帮你。
  8. APNs推送, 处理通知
  9. python 的内置函数(1)
  10. ural 1106 Two Teams
  11. 都是SCI惹的祸?
  12. eureka注册中心列表页面加账号和密码
  13. 关于 html input标签的几个常用操作
  14. 【bzoj 4764】弹飞大爷
  15. Java框架之Spring(三)
  16. C语言基础 - read()函数读取文本字节导致判断失误的问题
  17. Django-manage.py
  18. POJ 3304 Segments(线的相交判断)
  19. fixed
  20. BZOJ 1010 HNOI2008 玩具装箱 斜率优化

热门文章

  1. 解决Git - git push origin master 报错
  2. 第09组 团队Git现场编程实战
  3. C++2.0新特性(七)——&lt;Smart Pointer(智能指针)之weak_ptr&gt;
  4. 剑指offer: 求1+2+...+n
  5. 经典批处理实现自动关机(BAT)
  6. SpringMVC 给请求路径加上统一前缀
  7. pycharm使用(持续更新)
  8. django项目模型字段
  9. [LeetCode] 290. Word Pattern 单词模式
  10. DevOps - DevOps精要 - 变革