BZOJ 1227 虔诚的墓主人
Description
小W 是一片新造公墓的管理人。公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地。当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地。为了体现自己对主的真诚,他们希望自己的墓地拥有着较高的虔诚度。一块墓地的虔诚度是指以这块墓地为中心的十字架的数目。一个十字架可以看成中间是墓地,墓地的正上、正下、正左、正右都有恰好k 棵常青树。小W 希望知道他所管理的这片公墓中所有墓地的虔诚度总和是多少
Input
第一行包含两个用空格分隔的正整数N 和M,表示公墓的宽和长,因此这个矩形公墓共有(N+1) ×(M+1)个格点,左下角的坐标为(0, 0),右上角的坐标为(N, M)。第二行包含一个正整数W,表示公墓中常青树的个数。第三行起共W 行,每行包含两个用空格分隔的非负整数xi和yi,表示一棵常青树的坐标。输入保证没有两棵常青树拥有相同的坐标。最后一行包含一个正整数k,意义如题目所示。
Output
包含一个非负整数,表示这片公墓中所有墓地的虔诚度总和。为了方便起见,答案对2,147,483,648 取模。
Sample Input
13
0 2
0 3
1 2
1 3
2 0
2 1
2 4
2 5
2 6
3 2
3 3
4 3
5 2
2
Sample Output
HINT
图中,以墓地(2, 2)和(2, 3)为中心的十字架各有3个,即它们的虔诚度均为3。其他墓地的虔诚度为0。 对于30%的数据,满足1 ≤ N, M ≤ 1,000。对于60%的数据,满足1 ≤ N, M ≤ 1,000,000。对于100%的数据,满足1 ≤ N, M ≤ 1,000,000,000,0 ≤ xi ≤ N,0 ≤ yi ≤ M,1 ≤ W ≤ 100,000, 1 ≤ k ≤ 10。存在50%的数据,满足1 ≤ k ≤ 2。存在25%的数据,满足1 ≤ W ≤ 10000。
#include<stdio.h>
#include<string.h>
#include<algorithm>
const int maxn=,mod=;
int c[maxn][],tree[maxn],dis[maxn],n,m,k,K,w,ans=,hash[maxn],len;
using namespace std;
struct node{
int x,y,u,d,l,r,tx;
}a[maxn]; void make_c(){
for (int i=;i<maxn;i++){
c[i][]=;
for (int j=;j<=min(i,);j++) c[i][j]=c[i-][j]+c[i-][j-];
}
} int cmp(node a,node b){
return a.y==b.y?a.x<b.x:a.y<b.y;
} int query(int x){
int mid=;
while (x){
mid+=tree[x];
x-=x&(-x);
}
return mid;
} void add(int a,int x){
while (a<maxn){
tree[a]+=x;
a+=a&(-a);
}
} int main(){
make_c();
scanf("%d%d%d",&n,&m,&w);
for (int i=;i<=w;i++){
scanf("%d%d",&a[i].x,&a[i].y);
dis[i]=a[i].x;
}
scanf("%d",&K);
sort(dis+,dis++w);//离散化
len=unique(dis+,dis++w)-dis-;
sort(a+,a+w+,cmp);
for (int i=,y=-,k=;i<=w;i++){
if (a[i].y!=y) y=a[i].y,k=;
a[i].l=k;//左边树的个数
k++;
a[i].tx=lower_bound(dis+,dis+len+,a[i].x)-dis;
a[i].d=hash[a[i].tx];
hash[a[i].tx]++;//统计这一列上有几颗树
}
for (int i=w,y=-,k=;i>=;i--){
if (a[i].y!=y) y=a[i].y,k=;
a[i].r=k;
k++;
a[i].u=hash[a[i].tx]-a[i].d-;
}
for (int i=;i<=w;i++){
add(a[i].tx,c[a[i].u][K]*c[a[i].d+][K]-(query(a[i].tx)-query(a[i].tx-)));
if (a[i].y==a[i+].y)
ans+=c[a[i].l+][K]*c[a[i+].r+][K]*(query(a[i+].tx-)-query(a[i].tx));
}
printf("%d",(ans)&mod);
}
BZOJ 1227 虔诚的墓主人的更多相关文章
- BZOJ 1227 虔诚的墓主人(离散化+树状数组)
题目中矩形的尺寸太大,导致墓地的数目太多,如果我们统计每一个墓地的虔诚度,超时是一定的. 而常青树的数目<=1e5.这启发我们从树的方向去思考. 考虑一行没有树的情况,显然这一行的墓地的虔诚度之 ...
- 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 ...
- 1227: [SDOI2009]虔诚的墓主人
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 1083 Solved: 514[Submit][Stat ...
- BZOJ-1227 虔诚的墓主人 树状数组+离散化+组合数学
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MB Submit: 914 Solved: 431 [Submit][Statu ...
- bzoj1227 [SDOI2009]虔诚的墓主人(组合公式+离散化+线段树)
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 803 Solved: 372[Submit][Statu ...
- 【BZOJ1227】[SDOI2009]虔诚的墓主人(线段树)
[BZOJ1227][SDOI2009]虔诚的墓主人(线段树) 题面 BZOJ 洛谷 题解 显然发现答案就是对于每一个空位置,考虑上下左右各有多少棵树,然后就是这四个方向上树的数量中选\(K\)棵出来 ...
- [BZOJ1227][SDOI2009]虔诚的墓主人 组合数+树状数组
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 1433 Solved: 672[Submit][Stat ...
- bzoj1227 P2154 [SDOI2009]虔诚的墓主人
P2154 [SDOI2009]虔诚的墓主人 组合数学+离散化+树状数组 先看题,结合样例分析,易得每个墓地的虔诚度=C(正左几棵,k)*C(正右几棵,k)*C(正上几棵,k)*C(正下几棵,k),如 ...
随机推荐
- 基于MVVM的知乎日报应用安卓源码
使用data binding , dagger2 , retrofit2和rxjava实现的,基于MVVM的知乎日报APP运行效果: <ignore_js_op> 使用说明: 项目结构 a ...
- 在oc代码中使用swift第三方框架
swift现在使用越来越多了,一些主流的框架或者效果比较好的demo都陆陆续续使用swift写了.所以,要学会如何在oc的项目中调用swift. 这里主要借助一个桥梁文件,这个桥梁文件一般在你导入sw ...
- cvThreshold
看了很多很坑的文章. 呵呵哒.而且基本上都是一个地方转载的,英文翻译我用你单独给一个词条么?就不能负点儿责? cvThreshold(img4, img3, 0, 128, CV_THRESH_OTS ...
- oracle学习总结2
1:常用的函数 to_date()函数,将字符串转换为日期格式select to_date('2015-09-12','yyyy-MM-dd') from dual; --其中后面的日期格式要和前面要 ...
- 类似微博菜单 ,用swift语言编写
自定义tabar搭载界面1.-自定义标题按钮_如图 2.10-导航条按钮封装 演示如下 源代码下载DSWeibo.zip
- jquery animate 制作简单弹幕
定位滚动条 $("html,body").animate({scrollTop:$(".middle1").offset().top},1000) 弹幕 < ...
- 20160505-hibernate入门2
基本概念和CURD 开发流程 1由Domain object -> mapping->db.(官方推荐) 2由DB开始,用工具生成mapping和Domain object.(使用较多) ...
- powerdesign设置实体显示格式
工具-显示参数选择中,如下图:
- Java算法求最大最小值,冒泡排序,斐波纳契数列一些经典算法<不断更新中>
清明在家,无聊,把一些经典的算法总结了一下. 一.求最大,最小值 Scanner input=new Scanner(System.in); int[] a={21,31,4,2,766,345,2, ...
- Jquery中Ajax异步请求中的async参数的作用
之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html <a href="javascript:void(0)" on ...