JZOJ5146:港湾
Description
小林和康娜来到了港口,看到有货船正在卸货。
港口十分狭窄,只有两个卸货区可以使用。每个卸货区上面可以堆积任意多个箱子。
每卸下来一个箱子,工作人员都会把这个箱子放在某个卸货区的顶端。之后,当车辆来运走这个箱子的时候,也必须保证这个箱子在某个卸货区的顶端。
港口今天一共运来了N个箱子,第i个箱子在时刻Ai被卸货,在时刻Bi被取走。康娜发现,每个箱子被取走时,都恰好位于所在卸货区的顶端。
康娜觉得很有意思,她想要知道,有多少种卸货方案,使得每个箱子在被取走时都位于所在卸货区的顶端呢?
两种方案不同,当且仅当存在一个箱子,使得在两个方案中这个箱子被放在了不同的卸货区。
Input
第一行一个正整数N,表示箱子的数量。
接下来N行,每行两个空格分割的正整数Ai和Bi,表示第i个箱子在时刻Ai被卸货,在时刻Bi被取走。
Output
输出一行一个非负整数,表示合法的卸货方案。由于这个数字可能过大,你只需要输出方案数对1,000,000,007的模数即可。
Sample Input
4
1 3
2 5
4 8
6 7
Sample Output
HINT
对于30%的数据,N<=2000
对于100%的数据,
1<=N<=10^5
1<=Ai<Bi<=2N
A1,A2,...,AN,B1,B2,...,BN构成1...2N的一个排列。
#include<bits/stdc++.h>
using namespace std;
vector <int> v[];
int t[][],n,fa[][],bo[][],cnt,nn,tot,now;
pair <int,int> a[],b[];
void build(int l,int r,int fa)
{
cnt++; int x=cnt; t[x][]=l; t[x][]=r;
if(t[x][]==t[fa][])t[fa][]=x;else t[fa][]=x;
if(l==r)return;
build(l,(l+r)/,x); build((l+r)/+,r,x);
}
int get2(int x);
int get1(int x)
{
if(fa[x][]!=x){ int a=fa[x][]; fa[x][]=get1(a); fa[x][]^=get2(a); }
return fa[x][];
}
int get2(int x)
{
if(fa[x][]!=x){ int a=fa[x][]; fa[x][]=get1(a); fa[x][]^=get2(a); }
return fa[x][];
}
void ss(int x,int l,int r)
{
if(l>r)return;
int ll=t[x][],rr=t[x][]; int mid=(ll+rr)/;
if((ll==l)and(rr==r))
{
int mm=v[x].size();
for(int i=;i<mm;i++)
{
int aa=get1(v[x][i]),bb=get2(v[x][i]); int xxx=v[x][i];
if(bo[aa][bb]==){ bo[aa][bb]=; nn++; b[nn]=make_pair(aa,bb); }
}
return;
}
if(r<=mid)ss(t[x][],l,r);else
if(l>mid)ss(t[x][],l,r);else
{ ss(t[x][],l,mid); ss(t[x][],mid+,r); }
}
void ss2(int x,int l,int r)
{
if(l>r)return;
int ll=t[x][],rr=t[x][]; int mid=(ll+rr)/;
if((ll==l)and(rr==r))
{
int mm=v[x].size(),q[]; q[]=; q[]=;
for(int i=;i<mm;i++)
{
int bb=get2(v[x][i]);
if(q[bb]==)q[bb]=v[x][i];
}
v[x].clear();
if(q[]>)v[x].push_back(q[]);
if(q[]>)v[x].push_back(q[]);
return;
}
if(r<=mid)ss2(t[x][],l,r);else
if(l>mid)ss2(t[x][],l,r);else
{ ss2(t[x][],l,mid); ss2(t[x][],mid+,r); }
}
void ss3(int x,int l,int y)
{
int ll=t[x][],rr=t[x][]; int mid=(ll+rr)/;
v[x].push_back(y); if(ll==rr)return;
if(l<=mid)ss3(t[x][],l,y);
if(l>mid)ss3(t[x][],l,y);
}
void hb(int x,int y,int z)
{
int a=get1(x); if(a==y)return;
fa[a][]=y; fa[a][]^=z; tot--;
}
int main()
{
freopen("port.in","r",stdin);
freopen("port.out","w",stdout);
scanf("%d",&n); tot=n;
for(int i=;i<=n;i++)scanf("%d%d",&a[i].first,&a[i].second),fa[i][]=i;
sort(a+,a+n+); build(,*n,);
for(int i=;i<=n;i++)
{
nn=; now=i;
ss(,a[i].first+,a[i].second-);
sort(b+,b+nn+);
for(int j=;j<=nn;j++)
{
if((j>)and(b[j].first==b[j-].first)){ printf("0\n"); return ; }
hb(b[j].first,i,b[j].second^); bo[b[j].first][b[j].second]=;
}
ss2(,a[i].first+,a[i].second-);
ss3(,a[i].second,i);
}
long long ans=;
for(int i=;i<=tot;i++)ans=(ans*)%;
printf("%lld\n",ans);
}
JZOJ5146:港湾的更多相关文章
- 网络基础 港湾FlexHammer5010交换机镜像端口配置
港湾FlexHammer5010交换机镜像端口配置 by:授客 QQ:1033553122 1.登陆港湾交换机FlexHammer5010交换机 方法: telent 交换机ip 输入用户名 输入用户 ...
- AT2534 港湾設備 (Port Facility)
洛谷 先膜一下Iscream巨巨 首先我们可以把题目转化为线段覆盖,如果两条线段相交(不算某一条完全在另一条里面的情况),那么这两条线段代表的集装箱就不能放到同一个栈里,我们在它们之间连一条边.如果图 ...
- 设计模式之行为类模式大PK
行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...
- “风投云涌”:那些被资本看中的IT企业的风光与辛酸
进入七月份以来,纷享销客获得D轮融资1亿美元,撼动业界,资本与IT联姻令一部分创业者眼红的同时,没有人注意到背后的风险. 科技与资本的结合,是当今经济社会前行的宏大主题.相关统计显示,软件行 ...
- 优化MySchool数据库设计之【巅峰对决】
优化MySchool数据库设计 之独孤九剑 船舶停靠在港湾是很安全的,但这不是造船的目的 By:北大青鸟五道口原玉明老师 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识 ...
- 微冷的雨Java基础学习手记(一)
使用Java理解程序逻辑 之凌波微步 船舶停靠在港湾是很安全的,但这不是造船的目的 北大青鸟五道口原玉明老师出品 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识点时,要 ...
- 微冷的雨ASP.NET MVC之葵花宝典(MVC)
微冷的雨ASP.NET MVC之葵花宝典 By:微冷的雨 第一章 ASP.NET MVC的请求和处理机制. 在MVC中: 01.所有的请求都要归结到控制器(Controller)上. 02.约定优于配 ...
- css样式加载顺序及覆盖顺序深入理解
注:内容转载 很多的新手朋友们对css样式加载顺序和覆盖顺序的理解有所偏差,下面用示例为大家详细的介绍下,感兴趣的朋友不要错过 { height: 100%; width: 200; position ...
- IP地址数据库-ISP运营商列表(2017年1月)
IP地址数据库 微信号:qqzeng-ip [全球旗舰版][国内精华版][国外拓展版][英文版][掩码版] http://qqzeng.com 中国大陆:三大基础运营商 中国电信中国联通中国 ...
随机推荐
- spring中bean的高级属性之list, set, map以及props元素(含举例)
转自:http://qingfeng825.iteye.com/blog/144704 list, set, map和props元素分别用来设置类型为List,Set,Map和Propertis的属性 ...
- laravel将数组转换成集合
$myArray = collect($this -> menuPermissionTypes); //$this -> menuPermissionTypes是数组! dd($myArr ...
- rest_framework框架实现之(视图,路由,渲染器)
一视图 一 在前面我们使用视图时继承的时APIview from rest_framework.response import Response from rest_framework.paginat ...
- 如何修改magento分类页面的产品的显示个数
经常的有客户问,怎么修改分类页面的产品的个数 这个是magneto后台操作的设置问题 打开后台,在英文状态下: system-->configuration 进入后,点击catalog Prod ...
- 高级运维(一):反向代理&使用Varnish加速Web
案例1.反向代理 目标: 1.代理服务器可以将远程的Web服务器页面缓存于本地 2.代理服务器端口设置为80端口 3.用户通过访问代理服务器即可获得远程Web服务器页面上的内容 4.远程We ...
- elipse手机设备显示Target unknown或者offline解决方法
参考资料: http://blog.csdn.net/yuanjingjiang/article/details/11297433 http://www.educity.cn/wenda/153487 ...
- Wannafly Winter Camp Day8(Div1,onsite) E题 Souls-like Game 线段树 矩阵乘法
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门 Portal 原题目描述在最下面. 简单的 ...
- readUTF()和writeUTF()
readUTF()和writeUTF() 这是dataOutputStream 的方法~~使用utf-8编码 其实就是从unicode变过来的,utf8编码把unicode的ASCII编码变成1个字节 ...
- 二叉树总结及部分Lintcode题目分析 1
1. 遍历问题 Preorder / Inorder / Postorder preorder: root left right inorder: left root right postorder: ...
- 1060 Are They Equal (25 分)
1060 Are They Equal (25 分) If a machine can save only 3 significant digits, the float numbers 1230 ...