[luogu2154 SDOI2009] 虔诚的墓主人(树状数组+组合数)
Solution
显然每个点的权值可以由当前点上下左右的树的数量用组合数\(O(1)\)求出,但这样枚举会T
那么我们考虑一段连续区间,对于一行中两个常青树中间的部分左右树的数量一定,我们可用树状数组求区上下贡献值和,相乘就得到了当前区间的贡献。
有思路调不出来系列
Code
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define Re register
#define Ms(a,b) memset(a,(b),sizeof(a))
#define Fo(i,a,b) for(Re int i=(a),_=(b);i<=_;i++)
#define Ro(i,a,b) for(Re int i=(b),_=(a);i>=_;i--)
using namespace std;
typedef long long LL;
inline int read() {
int x=0,f=1;char c=getchar();
while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}
while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();
return x*f;
}
const int MAXW=1e5+5;
int n,m,W,lx,k,N;
int dx[MAXW],wx[MAXW],d[MAXW],l[MAXW],u[MAXW],r[MAXW];
LL ans,Cc[MAXW][13];
struct Tree{int x,y,id;}T[MAXW];
struct BIT{
LL da[MAXW];
BIT() {clear();}
void clear() {Ms(da,0);}
void add(int x,LL d) {for(;x<=lx;x+=x&-x)da[x]+=d;}
LL qry(int x) {LL t=0;for(;x;x-=x&-x)t+=da[x];return t;}
}B;
bool cmpx(Tree a,Tree b) {return a.x==b.x?a.y<b.y:a.x<b.x;}
bool cmpy(Tree a,Tree b) {return a.y==b.y?a.x<b.x:a.y<b.y;}
void init() {
sort(T+1,T+1+W,cmpx);
Fo(i,1,W) {
int j=i,now=0;
while(T[j+1].x==T[j].x) j++,d[T[j].id]=++now;
while(i<=j) u[T[i].id]=now--,i++; i--;
N=max(N,d[T[j].id]);
}
sort(T+1,T+1+W,cmpy);
Fo(i,1,W) {
int j=i,now=0;
while(T[j+1].y==T[j].y) j++,l[T[j].id]=++now;
while(i<=j) r[T[i].id]=now--,i++; i--;
N=max(N,l[T[j].id]);
}
Fo(i,0,N) Cc[i][0]=Cc[i][i]=1;
Fo(i,2,N) Fo(j,1,k) Cc[i][j]=Cc[i-1][j]+Cc[i-1][j-1];
sort(dx+1,dx+1+lx); lx=unique(dx+1,dx+1+lx)-dx-1;
Fo(i,1,W) wx[i]=lower_bound(dx+1,dx+1+lx,T[i].x)-dx;
}
LL C(int x) {return Cc[x][k];}
int main() {
n=read()+1; m=read()+1; W=read();
Fo(i,1,W) dx[++lx]=T[i].x=read()+1,T[i].y=read()+1,T[i].id=i;
k=read(); init();
for(Re int i=1,j;i<=W;i=j+1) {
j=i; B.add(wx[i],C(d[T[i].id]+1)*C(u[T[i].id])-C(d[T[i].id])*C(u[T[i].id]+1));
while(T[j+1].y==T[i].y) {
j++; ans+=C(l[T[j-1].id]+1)*C(r[T[j].id]+1)*(B.qry(wx[j]-1)-B.qry(wx[j-1]));
B.add(wx[j],C(d[T[j].id]+1)*C(u[T[j].id])-C(d[T[j].id])*C(u[T[j].id]+1));
}
}
printf("%d",ans&2147483647);//自然溢出,可以有效简化代码,但易出错,慎用
return 0;
}
[luogu2154 SDOI2009] 虔诚的墓主人(树状数组+组合数)的更多相关文章
- Bzoj 1227: [SDOI2009]虔诚的墓主人 树状数组,离散化,组合数学
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 895 Solved: 422[Submit][Statu ...
- P2154 [SDOI2009]虔诚的墓主人 树状数组
https://www.luogu.org/problemnew/show/P2154 题意 在一个坐标系中,有w(1e5)个点,这个图中空点的权值是正上,正下,正左,正右各取k个的排列组合情况.计算 ...
- BZOJ-1227 虔诚的墓主人 树状数组+离散化+组合数学
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MB Submit: 914 Solved: 431 [Submit][Statu ...
- BZOJ1227 SDOI2009 虔诚的墓主人【树状数组+组合数】【好题】*
BZOJ1227 SDOI2009 虔诚的墓主人 Description 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地. ...
- luogu2154 [SDOI2009] 虔诚的墓主人 离散化 树状数组 扫描线
题目大意 公墓可以看成一块N×M的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.一块墓地的虔诚度是指以这块墓地为中心的十字架的数目,一个十字架可以看成中间是墓地,墓地的正上.正 ...
- [BZOJ1227][SDOI2009]虔诚的墓主人 组合数+树状数组
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 1433 Solved: 672[Submit][Stat ...
- bzoj1227: [SDOI2009]虔诚的墓主人(树状数组,组合数)
传送门 首先,对于每一块墓地,如果上下左右各有$a,b,c,d$棵树,那么总的虔诚度就是$C_k^a*C_k^b*C_k^c*C_k^d$ 那么我们先把所有的点都给离散,然后按$x$为第一关键字,$y ...
- BZOJ1227 [SDOI2009]虔诚的墓主人 【树状数组】
题目 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地.为 ...
- BZOJ 1227 虔诚的墓主人(离散化+树状数组)
题目中矩形的尺寸太大,导致墓地的数目太多,如果我们统计每一个墓地的虔诚度,超时是一定的. 而常青树的数目<=1e5.这启发我们从树的方向去思考. 考虑一行没有树的情况,显然这一行的墓地的虔诚度之 ...
随机推荐
- JavaSE入门学习12: Java面相对象之static使用方法
我们能够基于一个类创建多个该类的对象,每一个对象都拥有自己的成员,互相独立. 然而在某些时候,我们更希 望该类全部的对象共享同一个成员. 此时就是static大显身手的时候了. Java中被stati ...
- iOS 手机没有安装支付宝的情况下,不调支付宝网页的解决的方法
NSArray *array = [[UIApplication sharedApplication] windows]; UIWindow* win=[array objectAtIndex:0]; ...
- 如何利用UDP协议封装一个数据包
在如何封装一个数据包上,是一个非常细致的问题,而利用UDP协议来封装的话,是比较简单,让我们一步步来分析典型的TCP/IP协议.一般来说一个典型的一个数据包,包括以太网MAC头+网络层IP数据头+传输 ...
- What is a good buffer size for socket programming?
http://stackoverflow.com/questions/2811006/what-is-a-good-buffer-size-for-socket-programming 问题: We ...
- jQuery Uploadify在ASP.NET MVC3中的使用
1.Uploadify简介 Uploadify是基于jQuery的一种上传插件,支持多文件.带进度条显示上传,在项目开发中常被使用. Uploadify官方网址:http://www.uploadif ...
- JSP-Runoob:JSP 隐式对象
ylbtech-JSP-Runoob:JSP 隐式对象 1.返回顶部 1. JSP 隐式对象 JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐式对 ...
- bzoj1690
二分+分数规划+dfs判环 跟1486很像,但是我忘记怎么判环了, 我们可以写一个dfs,如果当前节点的距离小于更新的距离,而且这个点已经在当前访问过了,那么就是有环了,如果没有访问过就继续dfs,每 ...
- bzoj3661
网络流/贪心 网络流做法是对于每一列,如果一个兔子下一天继续可以存在,那么连一条容量为1的边,然后设立一个中转站,来控制可以换的数量,容量限制l.时限100s,能跑过去我的太慢了,一个点100s 正解 ...
- E20170617-hm
notation n. 记号,标记法; implicit adj. 不言明[含蓄]的; 无疑问的,绝对的; 成为一部份的; 内含的; selector n. 选择者,选择器; promot ...
- redis-数据结构以及使用场景分析
目录 redis 常见数据结构以及使用场景分析 key String Hash List Set Sorted Set Bitmap和HyperLogLog Pub/Sub redis 常见数据结构以 ...