[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.这启发我们从树的方向去思考. 考虑一行没有树的情况,显然这一行的墓地的虔诚度之 ...
随机推荐
- nyoj27水池数目 (DFS)
题目27 题目信息 执行结果 本题排行 pid=27" style="text-decoration:none; color:rgb(55,119,188)">讨论 ...
- excel 字符串拼接 添加 超链接
=HYPERLINK("http://"&C2,"http://"&C2)
- win32 API函数
cozy的博文 win32 API函数大全 (2008-03-15 16:28) 分类: 个人日记 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WN ...
- [LeetCode] Unique Binary Search Tree
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- poj1611 并查集 (路径压缩)
http://poj.org/problem?id=1611 题目大意: 有一个学校,有N个学生,编号为0-N-1,现在0号学生感染了非典,凡是和0在一个社团的人就会感染,并且这些人如果还参加了别的社 ...
- jquery插件开发基本步骤
一.介绍 插件编写的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护. JQuery除了提供一个简单.有效的方式进行管理元素以及脚本,它还还提供了例外一种机制:即给核心 ...
- 在vue项目npm run build后,index.html中引入css和js 报MIME type问题
问题: 1.在vue项目中,build打包后,index页面打开会报错, MIME type ('text/html') ;报错内容:because its MIME type ('text/html ...
- scala控制流程语句
直接上代码了哈. package com.test.scala.test object Kongzi { def main(args: Array[String]): Unit = { //if 语句 ...
- System.Data.SqlClient.SqlException: 在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。) .
今天使用sql server 2008 R2管理器,进行SQL查询时,频率非常高的报错: System.Data.SqlClient.SqlException: 在向服务器发送请求时发生传输级错误. ...
- 自动保存草稿 asp+ajax自动存稿功能详解(转自影子)
自动保存草稿功能的原理 我们都知道网页是一种无状态的,每次都需要请求,响应,当一次请求完成后就与服务器断开连接了,所以我们不能像网页一样实现实时的交互功能,但是为了满足更多的需求一个比较无敌的程序员还 ...