考虑每次新放一个棋子会产生多少新的矩形,以及减掉多少旧的矩形。

用第$i$个点的坐标把坐标轴分成4个象限。

显然第一问的答案用四个单调栈就能解决。

而且第二问每个矩形的两个端点一定在1,3或2,4象限的单调栈里。

枚举第一象限里的一个点,剩下三个象限里维护3个指针,就能找出来第3象限里能和当前点组成矩形的点。

二四象限同理。

#include<bits/stdc++.h>
#define N 5005
#define ll long long
using namespace std;
int n;
struct node
{
int x,y;
}a[N];
ll ans1,ans2,now;
int p[N];
bool cmp(int x,int y)
{
return a[x].x<a[y].x;
}
int q1[N],q2[N],q3[N],q4[N],top[5];
int solve(int x)
{
memset(top,0,sizeof(top));
for(int i=1;i<=n;i++)
{
if(p[i]<x)
{
int op=1;
int t=p[i];
if(a[t].x<a[x].x&&a[t].y>a[x].y)op=2;
if(a[t].x<a[x].x&&a[t].y<a[x].y)op=3;
if(a[t].x>a[x].x&&a[t].y<a[x].y)op=4;
if(op==1)if(!top[1]||a[t].y<a[q1[top[1]]].y)q1[++top[1]]=t; if(op==2)
{
while(top[2]&&a[t].y<a[q2[top[2]]].y)top[2]--;
q2[++top[2]]=t;
} if(op==3)
{
while(top[3]&&a[t].y>a[q3[top[3]]].y)top[3]--;
q3[++top[3]]=t;
} if(op==4)if(!top[4]||a[t].y>a[q4[top[4]]].y)q4[++top[4]]=t;
}
}
int ans=top[1]+top[2]+top[3]+top[4];
int p1=top[2],p2=0,p3=top[3]+1,p4=top[3];
for(int i=1;i<=top[1];i++)
{
while(p1>=1&&a[q2[p1]].y>a[q1[i]].y)p1--; while(p2+1<=top[4]&&a[q4[p2+1]].x<a[q1[i]].x)p2++; while(p3-1>=1&&(!p1||a[q3[p3-1]].x>a[q2[p1]].x))p3--; while(p4>=1&&(p2!=0&&a[q4[p2]].y>a[q3[p4]].y))p4--; if(p4>=p3)ans-=p4-p3+1;
} p1=top[1]+1,p2=0,p3=top[4]+1,p4=top[4];
for(int i=1;i<=top[2];i++)
{
while(p1-1>=1&&a[q1[p1-1]].y<a[q2[i]].y)p1--; while(p2<=top[3]&&a[q3[p2]].x<a[q2[i]].x)p2++; while(p3-1>=1&&(p2==top[3]+1||a[q4[p3-1]].y>a[q3[p2]].y))p3--; while(p4>=1&&(p1!=top[1]+1&&a[q4[p4]].x>a[q1[p1]].x))p4--; if(p4>=p3)ans-=p4-p3+1;
} return ans;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].y);
for(int i=1;i<=n;i++)p[i]=i;
sort(p+1,p+n+1,cmp);
for(int i=1;i<=n;i++)
{
now+=solve(i);
if(i&1)ans1+=now;
else ans2+=now;
}
printf("%lld %lld\n",ans1,ans2);
return 0;
}

  

bzoj 1824: [JSOI2010]下棋问题的更多相关文章

  1. BZOJ 2208: [Jsoi2010]连通数 tarjan bitset

    2208: [Jsoi2010]连通数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  2. BZOJ 2208: [Jsoi2010]连通数( DFS )

    n只有2000,直接DFS就可以过了... -------------------------------------------------------------------------- #in ...

  3. BZOJ 1820: [JSOI2010]Express Service 快递服务( dp )

    dp(i,j,k)表示在处理第i个业务, 另外2个在j,k处. 第一维可以滚动... --------------------------------------------------------- ...

  4. BZOJ 1823: [JSOI2010]满汉全席( 2-sat )

    2-sat...假如一个评委喜好的2样中..其中一样没做, 那另一样就一定要做, 这样去建图..然后跑tarjan. 时间复杂度O((n+m)*K) ------------------------- ...

  5. bzoj 2208 [Jsoi2010]连通数

    2208: [Jsoi2010]连通数 Time Limit: 20 Sec  Memory Limit: 512 MB Description Input 输入数据第一行是图顶点的数量,一个正整数N ...

  6. bzoj 1825: [JSOI2010]蔬菜庆典

    1825: [JSOI2010]蔬菜庆典 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 112  Solved: 45[Submit][Status][ ...

  7. bzoj 1823: [JSOI2010]满汉全席 && bzoj 2199 : [Usaco2011 Jan]奶牛议会 2-sat

    noip之前学的内容了,看到题竟然忘了怎么建图了,复习一下. 2-sat 大概是对于每个元素,它有0和1两种选择,必须选一个但不能同时选.这之间又有一些二元关系,比如x&y=1等等... 先把 ...

  8. BZOJ 1821 JSOI2010 部落划分 Group prim

    Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成 ...

  9. bzoj 1823: [JSOI2010]满汉全席

    #include<iostream> #include<cstdio> #include<cstring> using namespace std; ],next[ ...

随机推荐

  1. 20155317 王新玮《网络对抗技术》实验5 MSF基础应用

    20155317 王新玮<网络对抗技术>实验5 MSF基础应用 1. MS08_067安全漏洞 原理:攻击者利用受害者主机默认开放的SMB服务端口445,发送特殊RPC请求,通过MSRPC ...

  2. 云计算背后的秘密:NoSQL诞生的原因和优缺点

    转载收藏一篇对nosql讲解的比较全面的文章:http://blog.csdn.net/xlgen157387/article/details/47908797 这篇文章将和大家聊聊为什么NoSQL会 ...

  3. LoRa---数据包结构、跳频

    数据包结构  跳频扩频技术FHSS 人太懒,直接贴图,自己看!

  4. [Zlib]_[初级]_[使用zlib库压缩和解压STL string]

    场景 1.一般在使用文本json传输数据, 数据量特别大时,传输的过程就特别耗时, 因为带宽或者socket的缓存是有限制的, 数据量越大, 传输时间就越长. 网站一般使用gzip来压缩成二进制. 说 ...

  5. cocos2d-x学习记录2——CCAction动作

    CCAction能够使CCNode运动起来,能够呈现出多种多样的动作.这些动作能够改变其运动方向.形状.大小.旋转等. 同时,还可利用CCCallFunc.CCCallFuncN.CCCallFunc ...

  6. HDFS-异常大全-《每日五分钟搞定大数据》

    点击看<每日五分钟搞定大数据>完整思维导图以及所有文章目录 问题1:Decomminssioning退役datanode(即删除节点) 1.配置exclude: <name>d ...

  7. gulp:入门简介

    本文是gulp的入门级介绍,主要内容包括什么是gulp,gulp与grunt有什么区别,gulp可以解决grunt存在的哪些问题,以及一个简单的说明例子. 什么是gulp gulp的官方定义非常简洁: ...

  8. 阿里云配置ssl证书

    一.申请证书和下载证书(阿里云申请) 二.在nginx服务器上配置ssl证书 1.检查服务器是否安装openssl 2.在nginx conf 文件夹创建 cret 文件,放置证书 [root@web ...

  9. 记录一次Docker For Windows10镜像加速器配置

    1.访问https://www.daocloud.io 注册账号 2.访问资源->加速器,或者直接访问网址https://www.daocloud.io/mirror,页面中间有加速配置,例如我 ...

  10. supervisor管理进程 superlance对进程状态报警

    supervisor介绍 首先,介绍一下supervisor.Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linu ...