[bzoj1227] [SDOI2009]虔诚的墓主人
终于填上了这个万年巨坑....从初二的时候就听说过这题...然后一直不敢写QAQ
现在感觉也不是很烦(然而我还是写麻烦了
离散化一波,预处理出组合数什么的。。
要维护对于当前行,每列上方和下方节点凑出合法方案的个数。
然后对于当前行上两棵相邻的常青树,求一下左边、右边合法方案数,乘上中间空的列的合法方案总数就好了。
单点修改,区间查询。。我竟然跑去写线段树...懒得改了。。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define ui unsigned int
using namespace std;
const int maxn=,mxnode=maxn<<;
struct zs{int v,id;}X[maxn],Y[maxn];
struct poi{int x,y;}a[maxn];
int lc[mxnode],rc[mxnode],num1[mxnode],num2[mxnode],tot;
int mp[maxn],st[maxn],top;
ui sm[mxnode],ans,SM,c[maxn][];
int i,j,k,n,m,kk,L,R,P; int ra,fh;char rx;
inline int read(){
rx=getchar(),ra=,fh=;
while((rx<''||rx>'')&&rx!='-')rx=getchar();
if(rx=='-')fh=-,rx=getchar();
while(rx>=''&&rx<='')ra*=,ra+=rx-,rx=getchar();return ra*fh;
}
void build(int a,int b){
int x=++tot;
if(a==b){num2[x]=mp[a];return;}
int mid=a+b>>;
lc[x]=tot+,build(a,mid),rc[x]=tot+,build(mid+,b);
}
void change(int x,int a,int b){
if(a==b){
num1[x]++,num2[x]--,sm[x]=c[num1[x]][kk]*c[num2[x]][kk];
return;
}
int mid=a+b>>;
if(P<=mid)change(lc[x],a,mid);else change(rc[x],mid+,b);
sm[x]=sm[lc[x]]+sm[rc[x]];
}
void query(int x,int a,int b){
if(L<=a&&R>=b){
SM+=sm[x];return;
}
int mid=a+b>>;
if(L<=mid)query(lc[x],a,mid);
if(R>mid)query(rc[x],mid+,b);
} bool cmp(zs a,zs b){return a.v<b.v;}
bool cmpa(poi a,poi b){return a.x<b.x||(a.x==b.x&&a.y<b.y);}
int main(){
n=read(),m=read();
n=read();
for(i=;i<=n;i++)X[i].v=read(),Y[i].v=read(),X[i].id=Y[i].id=i;
kk=read();
for(i=;i<=n;i++)c[i][]=;
for(i=;i<=n;i++)for(j=;j<=kk;j++)c[i][j]=c[i-][j]+c[i-][j-];
// for(i=1;i<=n;i++)printf("C(%d %d) %u\n",i,kk,c[i][kk]);return 233; sort(X+,X++n,cmp),sort(Y+,Y++n,cmp);int cntx=,cnty=;
for(i=;i<=n;a[X[i].id].x=cntx,i++)
if(X[i].v!=X[i-].v||i==)cntx++;
for(i=;i<=n;a[Y[i].id].y=cnty,mp[cnty]++,i++)
if(Y[i].v!=Y[i-].v||i==)cnty++;
sort(a+,a++n,cmpa);
build(,cnty); for(i=;i<=n;){
int r=i-,top=;
while(r<n&&a[r+].x==a[i].x)r++,st[++top]=P=a[r].y,change(,,cnty);//,printf(" %d",P);puts("");
if(top>=(kk<<))
for(j=kk;j<=top-kk;j++)if(st[j]+<st[j+])
SM=,L=st[j]+,R=st[j+]-,query(,,cnty),
ans+=SM*c[j][kk]*c[top-j][kk];
i=r+;
}
printf("%d\n",ans<<>>);
}
[bzoj1227] [SDOI2009]虔诚的墓主人的更多相关文章
- BZOJ1227 SDOI2009 虔诚的墓主人【树状数组+组合数】【好题】*
BZOJ1227 SDOI2009 虔诚的墓主人 Description 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地. ...
- bzoj1227 [SDOI2009]虔诚的墓主人(组合公式+离散化+线段树)
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 803 Solved: 372[Submit][Statu ...
- [BZOJ1227][SDOI2009]虔诚的墓主人 组合数+树状数组
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 1433 Solved: 672[Submit][Stat ...
- BZOJ1227 [SDOI2009]虔诚的墓主人 【树状数组】
题目 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地.为 ...
- bzoj1227: [SDOI2009]虔诚的墓主人(树状数组,组合数)
传送门 首先,对于每一块墓地,如果上下左右各有$a,b,c,d$棵树,那么总的虔诚度就是$C_k^a*C_k^b*C_k^c*C_k^d$ 那么我们先把所有的点都给离散,然后按$x$为第一关键字,$y ...
- 【BZOJ1227】[SDOI2009]虔诚的墓主人(线段树)
[BZOJ1227][SDOI2009]虔诚的墓主人(线段树) 题面 BZOJ 洛谷 题解 显然发现答案就是对于每一个空位置,考虑上下左右各有多少棵树,然后就是这四个方向上树的数量中选\(K\)棵出来 ...
- 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: 1078 Solved: 510[Submit][Stat ...
- Bzoj 1227: [SDOI2009]虔诚的墓主人 树状数组,离散化,组合数学
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 895 Solved: 422[Submit][Statu ...
随机推荐
- HTTP Live Streaming 直播(iOS直播) 初识
HTTP Live Streaming(HLS)技术,并实现了一个HLS编码器HLSLiveEncoder,当然,C++写的.其功能是采集摄像头与麦克风,实时进行H.264视频编码和AAC音频编码,并 ...
- iOS实现类似QQ的好友列表,自由展开折叠(在原来TableView的基础上添加一个字典,一个Button)
//直接代码 只包含 折叠展开字典的处理搭建#import "CFViewController.h" @interface CFViewController ()<UITab ...
- bzoj 2298: [HAOI2011]problem a
Description 一次考试共有n个人参加,第i个人说:"有ai个人分数比我高,bi个人分数比我低."问最少有几个人没有说真话(可能有相同的分数) Input 第一行一个整数n ...
- MVCC的一些理解
link 一.MVCC简介 MVCC (Multiversion Concurrency Control),即多版本并发控制技术,它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控 ...
- iOS使用带字体图标的UIButton(支持各种方向)
简书地址:http://www.jianshu.com/p/1c288440754d demo地址:https://github.com/Brances/ZMProject
- 使用 mysql PDO 防止sql注入
技巧: 1. php升级到5.3.6+,生产环境强烈建议升级到php 5.3.9+ php 5.4+,php 5.3.8存在致命的hash碰撞漏洞. 2. 若使用php 5.3.6+, 请在在PDO的 ...
- Java的静态代码块是否会在类被加载时自动执行?
JAVA静态代码块会在类被加载时自动执行? 一.先看Java静态方法,静态变量 http://www.cnblogs.com/winterfells/p/7906078.html 静态代码块 在类中, ...
- Fiddler的script用法
一.关于Fiddler Script Fiddler Script 是用JScript.NET语言写的.Fiddler 包含了一个脚本文件可以自动修改Http Request 和Response.这样 ...
- 通过tokenPlease()函数获取accessToken
作者:陈希章 发表于 2018年1月5日 这是一个很小的技巧,而且用几句话就能讲明白.事情是这样的,我最近在回顾之前写过的文章:通过其他第三方工具体验Microsoft Graph 的时候,发现最近的 ...
- Effective Java 第三版——17. 最小化可变性
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...