P2154 [SDOI2009]虔诚的墓主人
略有一点点思维的题。
首先,如果一个点上,下,左,右分别有\(a,b,c,d\)棵树,那这个点的十字架方案为\(C_{a}^{k}C_{b}^{k}C_{c}^{k}C_{d}^{k}\)。
按x坐标扫一遍,同时树状数组维护每个y坐标的\(C_{a}^{k}C_{b}^{k}\),直接统计答案。复杂度\(O(nlogn)\)。
#include<bits/stdc++.h>
#define il inline
#define vd void
#define ll long long
#define mod 2147483648ll
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
ll x[100010],y[100010],uni_x[100010],uni_y[100010];
std::vector<ll>S[100010];
ll t[100010];
il vd inc(ll&x,ll y){x+=y;x%=mod;}
il vd update(ll x,ll y){while(x<uni_y[0])inc(t[x],y),x+=x&-x;}
il ll query(ll x){ll ret=0;while(x)ret+=t[x],x-=x&-x;return ret%mod;}
il ll Query(ll l,ll r){
if(l>r)return 0;
return (query(r)-query(l-1)+mod)%mod;
}
ll A[100010],B[100010],C[200010][11];
int main(){
#ifndef ONLINE_JUDGE
freopen("2154.in","r",stdin);
freopen("2154.out","w",stdout);
#endif
gi(),gi();ll n=gi();
for(ll i=1;i<=n;++i)x[i]=uni_x[i]=gi(),y[i]=uni_y[i]=gi();
std::sort(uni_x+1,uni_x+n+1);std::sort(uni_y+1,uni_y+n+1);
uni_x[0]=std::unique(uni_x+1,uni_x+n+1)-uni_x;
uni_y[0]=std::unique(uni_y+1,uni_y+n+1)-uni_y;
for(ll i=1;i<=n;++i)x[i]=std::lower_bound(uni_x+1,uni_x+uni_x[0],x[i])-uni_x,y[i]=std::lower_bound(uni_y+1,uni_y+uni_y[0],y[i])-uni_y;
for(ll i=1;i<=n;++i)S[x[i]].push_back(y[i]);
ll k=gi(),ans=0;
for(ll i=1;i<=n;++i)++B[y[i]];
C[0][0]=1;
for(int i=1;i<=200000;++i){
C[i][0]=1;
for(int j=1;j<=i&&j<=k;++j)C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
}
for(ll i=1;i<uni_x[0];++i){
std::sort(S[i].begin(),S[i].end());
for(ll j=0;j<S[i].size();++j){
update(S[i][j],mod-C[A[S[i][j]]][k]*C[B[S[i][j]]][k]%mod);
--B[S[i][j]];
update(S[i][j],C[A[S[i][j]]][k]*C[B[S[i][j]]][k]%mod);
}
for(ll j=1;j<S[i].size();++j)ans+=C[j][k]*C[(ll)S[i].size()-j][k]%mod*Query(S[i][j-1]+1,S[i][j]-1)%mod;
for(ll j=0;j<S[i].size();++j){
update(S[i][j],mod-C[A[S[i][j]]][k]*C[B[S[i][j]]][k]%mod);
++A[S[i][j]];
update(S[i][j],C[A[S[i][j]]][k]*C[B[S[i][j]]][k]%mod);
}
ans%=mod;
}
printf("%lld\n",ans);
return 0;
}
P2154 [SDOI2009]虔诚的墓主人的更多相关文章
- bzoj1227 P2154 [SDOI2009]虔诚的墓主人
P2154 [SDOI2009]虔诚的墓主人 组合数学+离散化+树状数组 先看题,结合样例分析,易得每个墓地的虔诚度=C(正左几棵,k)*C(正右几棵,k)*C(正上几棵,k)*C(正下几棵,k),如 ...
- P2154 [SDOI2009]虔诚的墓主人 树状数组
https://www.luogu.org/problemnew/show/P2154 题意 在一个坐标系中,有w(1e5)个点,这个图中空点的权值是正上,正下,正左,正右各取k个的排列组合情况.计算 ...
- [洛谷P2154] SDOI2009 虔诚的墓主人
问题描述 小W是一片新造公墓的管理人.公墓可以看成一块N×M的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地. 当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地. ...
- luogu P2154 [SDOI2009]虔诚的墓主人
luogu 下面记一个点上下左右点数分别为\(u_i,d_i,l_i,r_i\) 枚举每个中间点太慢了,考虑枚举两个点之间横的一条线段,这里面的点左边点数目都相同,右边点数目都相同,然后只要查一下区间 ...
- BZOJ 1227: [SDOI2009]虔诚的墓主人
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 1078 Solved: 510[Submit][Stat ...
- Bzoj 1227: [SDOI2009]虔诚的墓主人 树状数组,离散化,组合数学
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 895 Solved: 422[Submit][Statu ...
- 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]虔诚的墓主人(线段树) 题面 BZOJ 洛谷 题解 显然发现答案就是对于每一个空位置,考虑上下左右各有多少棵树,然后就是这四个方向上树的数量中选\(K\)棵出来 ...
随机推荐
- sonarQube环境搭建--常见问题及解决
环境配置:MySQL Server 5.7 Jdk1.8 1.安装mysql数据库(默认安装一路默认到底,注意不要先新建用户账号) a) Mysql 环境变量配置: b)新增my.ini文件: ...
- 【转】什么是JavaScript
转自mdn学习网站-什么是JavaScript 什么是JavaScript? 欢迎来到 MDN JavaScript 初学者的课程! 在第一篇文章中,我们将会站在一定的高度来俯看 JavaScript ...
- hibernate设置了not-null 为什么无效?
因为设错地方了! 错误--写在了property标签里 <property name="password" type="string" length=&q ...
- 2018 徐州赛区网赛 G. Trace
题目链接在这里 题意是:按时间先后有许多左下角固定为(0,0),右上角为(xi,yi)的矩形浪潮,每次浪潮会留下痕迹,但是后来的浪潮又会冲刷掉自己区域的老痕,留下新痕迹,问最后留下的痕迹长度为多少? ...
- 02-urllib库的get请求方式
对于urllib中的get请求方式,可以直接传入url的连接即可访问页面,但是对于要传入关键字的话,也可以用quote进行编码再传入. 案例如下: #get请求搜索参数如何添加 import urll ...
- 【JS】#001 JS定义对象写法(原型、JSON方式)
下面主要写两种 JS 定义对象的 常用写法 写法1:[很像面向对象语言中的写法] function zhongxia(age) { this.age = age; } zhongxia.name = ...
- bzoj1808 [Ioi2007]training 训练路径
Description 马克(Mirko)和斯拉夫克(Slavko)正在为克罗地亚举办的每年一次的双人骑车马拉松赛而紧张训练.他们需要选择一条训练路径. 他们国家有N个城市和M条道路.每条道路连接两个 ...
- python第二十课——math模块中常用的函数
属性: e:自然数 pi:圆周率 函数: ceil():向上取整 floor():向下取整 sqrt():开平方根 radians():角度转弧度 degrees():弧度转角度 import mat ...
- 用php代码统计数据库中符合条件的行数
$sql1 = "select count(*) from t_user where age<17"; $data1 = mysql_query($sql1); $rows1 ...
- C. Serval and Parenthesis Sequence 【括号匹配】 Codeforces Round #551 (Div. 2)
冲鸭,去刷题:http://codeforces.com/contest/1153/problem/C C. Serval and Parenthesis Sequence time limit pe ...