传送门

有点难调啊。其实是我自己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)的更多相关文章

  1. bzoj1227 P2154 [SDOI2009]虔诚的墓主人

    P2154 [SDOI2009]虔诚的墓主人 组合数学+离散化+树状数组 先看题,结合样例分析,易得每个墓地的虔诚度=C(正左几棵,k)*C(正右几棵,k)*C(正上几棵,k)*C(正下几棵,k),如 ...

  2. Bzoj 1227: [SDOI2009]虔诚的墓主人 树状数组,离散化,组合数学

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 895  Solved: 422[Submit][Statu ...

  3. BZOJ 1227: [SDOI2009]虔诚的墓主人

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 1078  Solved: 510[Submit][Stat ...

  4. bzoj1227 [SDOI2009]虔诚的墓主人(组合公式+离散化+线段树)

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 803  Solved: 372[Submit][Statu ...

  5. 1227: [SDOI2009]虔诚的墓主人

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 1083  Solved: 514[Submit][Stat ...

  6. BZOJ1227 SDOI2009 虔诚的墓主人【树状数组+组合数】【好题】*

    BZOJ1227 SDOI2009 虔诚的墓主人 Description 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地. ...

  7. [BZOJ1227][SDOI2009]虔诚的墓主人 组合数+树状数组

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 1433  Solved: 672[Submit][Stat ...

  8. 【BZOJ1227】[SDOI2009]虔诚的墓主人(线段树)

    [BZOJ1227][SDOI2009]虔诚的墓主人(线段树) 题面 BZOJ 洛谷 题解 显然发现答案就是对于每一个空位置,考虑上下左右各有多少棵树,然后就是这四个方向上树的数量中选\(K\)棵出来 ...

  9. 【LG2154】[SDOI2009]虔诚的墓主人

    [LG2154][SDOI2009]虔诚的墓主人 题面 洛谷 题解 如果您没有看懂题,请反复阅读题面及样例 可以发现,对于某一个点,它的答案就是上下左右几个组合数乘起来. 这样直接做复杂度显然爆炸,考 ...

随机推荐

  1. Appium+python自动化1-环境搭建

    一.前言 appium可以说是做app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本语言也是支持java和Python.小编擅长Python,所以接下来的教程是appium+ ...

  2. WdatePicker控件Javascript取得当前时间、取得减30分钟时间

    1.取得当前时间 function getNowFormatDate() { var date = new Date(); var seperator1 = "-"; var se ...

  3. Git之清除已保存的账户

    Git会自动保存输入过的用户名.密码. Git的配置文件是-/.gitconfig.可在windows下的GIt Bash.Mac的命令行中,用vim ~/.gitconfig打开. Windows ...

  4. HDU 6118 度度熊的交易计划(最小费用最大流)

    Problem Description度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区. 由于生产能力的区别,第i个 ...

  5. 计算Python运行时间

    可以调用datetime 或者 time库实现得到Python运行时间 方法1 import datetime start_t  = datetime.datetime.now() #运行大型代码 e ...

  6. echarts横向柱状图如果想打开网址

    代码: var data = eval(data); var xList = new Array(); var yList = new Array(); var urlList = new Array ...

  7. idea不识别yml配置文件,怎么办?

      问题描述: 如下图,新建的springboot项目,添加了自定义的配置文件后,2.yml无法像上方文件的一样,被识别成配置文件! 虽然可能不会影响项目(不确定),但问题不解决,根本没有心情开始下一 ...

  8. Android Studio无法打印Logout日志

    华为手机: 在拨号界面输入:*#*#2846579#*#* 进入测试菜单界面,然后Project Menu → 后台设置 → LOG设置LOG 开关 → LOG 打开        LOG 级别设置 ...

  9. Java_9 面向对象

    1.面向对象思想 面向过程的思想:自己做什么 面向对象的思想:自己找谁做,即不断地创造对象.使用对象.指挥对象做事情.万物皆对象. 面对对象的特征:封装.继承.多态. 2.java中基本单元类 成员变 ...

  10. a file was not found

    除了权限问题 还有可能是vm的字符串长度超出限制