2018.10.25 bzo1227: [SDOI2009]虔诚的墓主人(组合数学+扫描线+bit)
传送门
有点难调啊。其实是我自己sb了
不过交上去1A1A1A还是平衡了一下心态。
所以这道题怎么做呢?
我们考虑对于一个点(x,y)(x,y)(x,y)如果这个点成为中心,正左/右/上/下分别有l/r/u/d/l/r/u/d/l/r/u/d/棵树,那么对于这个点Ans=(lk)∗(rk)∗(uk)∗(dk)Ans=\binom {l} {k}*\binom {r} {k}*\binom {u} {k}*\binom {d} {k}Ans=(kl)∗(kr)∗(ku)∗(kd)
发现离散化之后直接枚举是O(n2)O(n^2)O(n2)的。
于是我们用扫描线做。
按yyy为第一关键字,xxx为第二关键字排个序。
然后用bitbitbit维护上下两侧的总方案数,左右的直接在扫的时候统计。
这样边做边更新答案就行了。
代码:
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
const long long mod=1ll<<31;
const int N=1e5+5;
int n,k,vx[N],vy[N],sigx,sigy,bit[N],C[N][15],L[N],R[N],U[N],D[N],ans=0;
struct Node{int x,y;}p[N];
inline int lowbit(int x){return x&-x;}
inline void update(int x,int v){for(int i=x;i<=sigx;i+=lowbit(i))bit[i]+=v;}
inline int query(int x){int ret=0;for(int i=x;i;i-=lowbit(i))ret+=bit[i];return ret;}
inline bool cmp(const Node&a,const Node&b){return a.y==b.y?a.x<b.x:a.y<b.y;}
int main(){
n=read(),n=read(),n=read();
for(int i=1;i<=n;++i)p[i].x=vx[i]=read(),p[i].y=vy[i]=read();
k=read(),C[1][1]=C[1][0]=1;
for(int i=2;i<=n;++i){
C[i][0]=1;
for(int j=1;j<=k;++j)C[i][j]=C[i-1][j-1]+C[i-1][j];
}
sort(vx+1,vx+n+1),sigx=unique(vx+1,vx+n+1)-vx-1,sort(vy+1,vy+n+1),sigy=unique(vy+1,vy+n+1)-vy-1;
for(int i=1;i<=n;++i)p[i].x=lower_bound(vx+1,vx+sigx+1,p[i].x)-vx,p[i].y=lower_bound(vy+1,vy+sigy+1,p[i].y)-vy,++U[p[i].x],++R[p[i].y];
sort(p+1,p+n+1,cmp);
for(int i=1;i<=n;++i){
if(p[i-1].y^p[i].y)goto UPD;
ans+=C[R[p[i].y]][k]*C[L[p[i].y]][k]*(query(p[i].x-1)-query(p[i-1].x));
UPD:++L[p[i].y],--R[p[i].y],update(p[i].x,-C[U[p[i].x]][k]*C[D[p[i].x]][k]),--U[p[i].x],++D[p[i].x],update(p[i].x,C[U[p[i].x]][k]*C[D[p[i].x]][k]);
}
cout<<1ll*(ans+mod)%mod;
return 0;
}
2018.10.25 bzo1227: [SDOI2009]虔诚的墓主人(组合数学+扫描线+bit)的更多相关文章
- bzoj1227 P2154 [SDOI2009]虔诚的墓主人
P2154 [SDOI2009]虔诚的墓主人 组合数学+离散化+树状数组 先看题,结合样例分析,易得每个墓地的虔诚度=C(正左几棵,k)*C(正右几棵,k)*C(正上几棵,k)*C(正下几棵,k),如 ...
- Bzoj 1227: [SDOI2009]虔诚的墓主人 树状数组,离散化,组合数学
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 895 Solved: 422[Submit][Statu ...
- BZOJ 1227: [SDOI2009]虔诚的墓主人
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 1078 Solved: 510[Submit][Stat ...
- bzoj1227 [SDOI2009]虔诚的墓主人(组合公式+离散化+线段树)
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 803 Solved: 372[Submit][Statu ...
- 1227: [SDOI2009]虔诚的墓主人
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 1083 Solved: 514[Submit][Stat ...
- BZOJ1227 SDOI2009 虔诚的墓主人【树状数组+组合数】【好题】*
BZOJ1227 SDOI2009 虔诚的墓主人 Description 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地. ...
- [BZOJ1227][SDOI2009]虔诚的墓主人 组合数+树状数组
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 1433 Solved: 672[Submit][Stat ...
- 【BZOJ1227】[SDOI2009]虔诚的墓主人(线段树)
[BZOJ1227][SDOI2009]虔诚的墓主人(线段树) 题面 BZOJ 洛谷 题解 显然发现答案就是对于每一个空位置,考虑上下左右各有多少棵树,然后就是这四个方向上树的数量中选\(K\)棵出来 ...
- 【LG2154】[SDOI2009]虔诚的墓主人
[LG2154][SDOI2009]虔诚的墓主人 题面 洛谷 题解 如果您没有看懂题,请反复阅读题面及样例 可以发现,对于某一个点,它的答案就是上下左右几个组合数乘起来. 这样直接做复杂度显然爆炸,考 ...
随机推荐
- shape 图形
主要属性: <?xml version="1.0"encoding="utf-8"?><shape > <corners /> ...
- FortiGate软件版本升级
1.Web界面升级 1)注意:升级前,务必做好配置备份 2)要点 1.FortiGate防火墙的每款型号都有单独的版本文件,升级前务必确认下当前的设备型号: 2.升级包的后缀名必须为.out,前缀任意 ...
- stark组件之路由分发【模仿Django的admin】
一.先看下django的admin是如何进行路由分发的 1.先看下django的admin的url路径有哪些 其实很简单,假如有一个书籍表,那么每张表对应四个url,增.删.改.查 查看的url ht ...
- 使用pyqt写了一个检查大数据环境的gui
通过pyqt做了一个大数据最佳实践检查的gui界面 1.首先是需要用到的模块 from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets ...
- Hashed collections哈希集合
[定义] 有index的集合 [hash的原理] term for a situation when two different objects return the same hashcode: h ...
- day 19 类的名称空间,组合,派生
对象的属性: 不仅在__init__里面添加,还可以在其他方法或者类外面添加 class Game: def __init__(self,name,age): self.name = name sel ...
- c# 24种设计模式4建造者模式(Builder)
先来一个例子 建造者接口 public interface IBuilder { void CreateLogo(); void CreateBody(); void CreateWheel(); v ...
- SharpSvn 调用在运行时提示加载程序集出错,或有依赖项
策略后引用: SharpSvn, Version=1.8009.3299.43, Culture=neutral, PublicKeyToken=d729672594885a28日志: 尝试下载新的 ...
- Java VisualVM 插件地址
打开Java VisualVM检查更新插件时,默认的连接连不上,通过浏览器访问之后发现默认的服务器已经404,新地址已经迁移到github,下面这个地址里面有不同版本jdk对应的插件中心地址. htt ...
- 安装composer,以及通过composer安装laravel
1安装composer http://docs.phpcomposer.com/00-intro.html#Installation-Windows中选择windows安装 下载并且运行 Compos ...