#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. iOS进阶收藏

    XCode自带重构方式http://www.cocoachina.com/ios/20160127/15097.html iOS迭代多语言开发http://www.cocoachina.com/ios ...

  2. 用python实现把数字人民币金额转换成大写的脚本程序

    # -*- coding: utf-8 -*- def Num2MoneyFormat( change_number ): """ .转换数字为大写货币格式( forma ...

  3. 【Todo】用python进行机器学习数据模拟及逻辑回归实验

    参考了这个网页:http://blog.csdn.net/han_xiaoyang/article/details/49123419 数据用了 https://pan.baidu.com/s/1pKx ...

  4. javascript的语句和函数

    1.for-in语句:是一种精准的迭代语句,可以用来枚举对象的属性. 2.label语句:在代码中添加标签,以便将来使用,由break和continue语句调用. 3.with语句:将代码的作用域设置 ...

  5. Implicit Object in JSP

    Implicit Object Description request The HttpServletRequest object associated with the request. respo ...

  6. Django开发博客 入门篇

    Django是神马? Django是一个开源免费的Web框架,使用Python编写.能够让你快速写出一个Web应用, 因为它包含了绝大部分的组件,比如认证,表单,ORM,Session,安全,文件上传 ...

  7. python 练习 4

    #!/usr/bin/python # -*- coding: utf-8 -*- from math import sqrt import random def daoxu(n): d=n s=0 ...

  8. 背景大图隔几秒切换(非轮播,淡入淡出)--变形金刚joy007 项目总结

    工作日想了好久,周日回家才想出来的... 图片切换(非轮播,淡入淡出) 1.切换2.停止 <html> <head> <meta content="text/h ...

  9. Jquery 操作Html 控件 CheckBox、Radio、Select 控件 【转】http://www.cnblogs.com/lxblog/archive/2013/01/09/2853056.html

    Jquery 操作Html 控件 CheckBox.Radio.Select 控件   在使用 Javascript 编写前台脚本的时候,经常会操作 Html 控件,比如 checkbox.radio ...

  10. nyoj------170网络的可靠性

    网络的可靠性 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 A公司是全球依靠的互联网解决方案提供商,也是2010年世博会的高级赞助商.它将提供先进的网络协作技术,展 ...