#include<cstdio>
#include<iostream>
#include<algorithm>
#define M 100009
using namespace std;
struct data
{
int x,y,z,f[];
double sum[];
}a[M],b[M];
struct ss
{
int w;
double su;
}shu[M];
int n,yy[M],zz[M],yl,zl,ans,tot,sta[M];
double sum1;
bool cmp(data a1,data a2)
{
if(a1.y==a2.y)
return a1.x<a2.x;
return a1.y<a2.y;
}
bool cmp1(data a1,data a2)
{
return a1.x>a2.x;
}
void updata(int i,int p)
{
int a1=a[i].z;
for(;a1<=zl;a1+=a1&-a1)
if(shu[a1].w<a[i].f[p])
{
if(shu[a1].w==)
sta[++tot]=a1;
shu[a1].w=a[i].f[p];
shu[a1].su=a[i].sum[p];
}
else if(shu[a1].w==a[i].f[p])
shu[a1].su+=a[i].sum[p];
return;
}
void ask(int i,int p)
{
int a1=a[i].z;
for(;a1;a1-=a1&-a1)
if(a[i].f[p]<=shu[a1].w&&shu[a1].w)
{
a[i].f[p]=shu[a1].w+;
a[i].sum[p]=shu[a1].su;
}
else if(a[i].f[p]==shu[a1].w+)
a[i].sum[p]+=shu[a1].su;
return;
}
void solve(int l,int r,int p)
{
if(l==r)
{
if(a[l].f[p]==)
a[l].f[p]=a[l].sum[p]=;
return;
}
int mid=(l+r)>>;
int l1=l,l2=mid+;
for(int i=l;i<=r;i++)
if(a[i].x<=mid)
b[l1++]=a[i];
else
b[l2++]=a[i];
for(int i=l;i<=r;i++)
a[i]=b[i];
solve(l,mid,p);
sort(a+l,a+mid+,cmp);
int st=l;
for(int i=mid+;i<=r;i++)
{
for(;a[st].y<=a[i].y&&st<=mid;st++)
updata(st,p);
ask(i,p);
}
for(int i=;i<=tot;i++)
shu[sta[i]].w=shu[sta[i]].su=;
tot=;
solve(mid+,r,p);
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
a[i].x=i;
scanf("%d%d",&a[i].y,&a[i].z);
yy[i]=a[i].y;
zz[i]=a[i].z;
}
sort(yy+,yy+n+);
sort(zz+,zz+n+);
yl=unique(yy+,yy+n+)-yy-;
zl=unique(zz+,zz+n+)-zz-;
for(int i=;i<=n;i++)
{
a[i].y=yl-(lower_bound(yy+,yy+yl+,a[i].y)-yy)+;
a[i].z=zl-(lower_bound(zz+,zz+zl+,a[i].z)-zz)+;
}
sort(a+,a+n+,cmp);
solve(,n,);
for(int i=;i<=n;i++)
{
a[i].x=n-a[i].x+;
a[i].y=yl-a[i].y+;
a[i].z=zl-a[i].z+;
}
sort(a+,a+n+,cmp);
solve(,n,);
sort(a+,a+n+,cmp1);
for(int i=;i<=n;i++)
if(a[i].f[]>ans)
{
ans=a[i].f[];
sum1=a[i].sum[];
}
else if(a[i].f[]==ans)
sum1+=a[i].sum[];
printf("%d\n",ans);
for(int i=;i<=n;i++)
if(a[i].f[]+a[i].f[]-==ans)
printf("%.5lf ",a[i].sum[]*a[i].sum[]/sum1);
else
printf("0.00000 ");
return ;
}

首先第一问明显是一个三维偏序集,速度,高度,时间,用CDQ分治做,然后我们把它反过来,在做一边CDQ分治,这两遍求出来的方案数组相乘,就是过这个点的方案数。

bzoj 2244: [SDOI2011]拦截导弹的更多相关文章

  1. bzoj 2244: [SDOI2011]拦截导弹 cdq分治

    2244: [SDOI2011]拦截导弹 Time Limit: 30 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 237  Solved: ...

  2. BZOJ 2244: [SDOI2011]拦截导弹 DP+CDQ分治

    2244: [SDOI2011]拦截导弹 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截 ...

  3. bzoj 2244 [SDOI2011]拦截导弹(DP+CDQ分治+BIT)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2244 [题意] 给定n个二元组,求出最长不上升子序列和各颗导弹被拦截的概率. [思路] ...

  4. bzoj 2244 [SDOI2011]拦截导弹(dp+CDQ+树状数组)

    传送门 题解 看了半天完全没发现这东西和CDQ有什么关系…… 先把原序列翻转,求起来方便 然后把每一个位置表示成$(a,b,c)$其中$a$表示位置,$b$表示高度,$c$表示速度,求有多少个位置$a ...

  5. BZOJ 2244: [SDOI2011]拦截导弹 [CDQ分治 树状数组]

    传送门 题意:三维最长不上升子序列以及每个元素出现在最长不上升子序列的概率 $1A$了好开心 首先需要从左右各求一遍,长度就是$F[0][i]+F[1][i]-1$,次数就是$G[0][i]*G[1] ...

  6. BZOJ 2244 [SDOI2011]拦截导弹 ——CDQ分治

    三维偏序,直接CDQ硬上. 正反两次CDQ统计结尾的方案数,最后统计即可. #include <cstdio> #include <cstring> #include < ...

  7. BZOJ 2244 [SDOI2011]拦截导弹 (三维偏序CDQ+线段树)

    题目大意: 洛谷传送门 不愧为SDOI的duliu题 第一问?二元组的最长不上升子序列长度?裸的三维偏序问题,直接上$CDQ$ 由于是不上升,需要查询某一范围的最大值,并不是前缀最大值,建议用线段树实 ...

  8. BZOJ 2244: [SDOI2011]拦截导弹 (CDQ分治 三维偏序 DP)

    题意 略- 分析 就是求最长不上升子序列,坐标取一下反就是求最长不下降子序列,比较大小是二维(h,v)(h,v)(h,v)的比较.我们不看概率,先看第一问怎么求最长不降子序列.设f[i]f[i]f[i ...

  9. BZOJ:2244: [SDOI2011]拦截导弹

    问题: printf("%.5f ",0):为什么错了? 注意: 初始值很重要 题解: 三维偏序问题: 记录从前往后最长上升子序列长度pref,条数preg 从后往前suff,su ...

随机推荐

  1. nodejs学习笔记<六>文件处理

    nodejs处理文件模块:fs  —>  var fs = require(‘fs’); 读取文件:readFileSync & readFile 读取文件路径为绝对: 读取结果需要to ...

  2. xml配置文件详解

    1:bean的基本属性配置: <!-- id是bean的标识符,必须唯一,如果没有配置id,name默认为标识符 如果配置了id,有配置了name,那么name为别名 name可以设置多个别名, ...

  3. MyEclipse8.5启动无法选择工作空间的问题

    方法一:打开Window---Preferences---General---Startup and Shutdown,勾选Prompt for workspace on startup 选项,再次登 ...

  4. SQL SERVER 2008函数大全(含例子)

    --SQL SERVER 2008 函数大全 /* author:TracyLee csdncount:Travylee */ /* 一.字符串函数: 1.ascii(字符串表达式)    返回字符串 ...

  5. 转:c的回归-云风

    C 的回归 周末出差,去另一个城市给公司的一个项目解决点问题.回程去机场的路上,我用手机上 google reader 打发时间.第一眼就看到孟岩大大新的一篇:Linux之父话糙理不糙 .主题是 C ...

  6. django在pyhton2.7 和 python3.* 之间代码和睦相处的方法

    “祥”龙第一掌: from __future__ import unicode_literals from django.utils.encoding import python_2_unicode_ ...

  7. maven和jdk版本不匹配

    解决方法:http://blog.csdn.net/mafan121/article/details/51944346

  8. Python类属性详解

    在python开发中,我们常常用到python的类,今天就通过实例和大家扒一扒类的属性,一起来看看吧. 类属性 1.类定义后就存在,而且不需要实例化 2.类属性使得相同类的不同实例共同持有相同变量 类 ...

  9. eclipse 中发布 maven 项目到 tomcat

    第一步:在 eclipse 中 右键  你的项目 Run as --> Maven build...--> Goals: 输入 install   run 第二步:在 eclipse 中 ...

  10. 周爱民-javascript

    从纯化的语言中了解到语言的本质:并以混杂的语言来创造我们的世界,.   程序=算法+结构,动静之间,不变的是本质   了解语言的本质,而不是试图学会一门语言.   本书从语言特性出发,把动态静态.函数 ...