luogu 2154 离散化+杨辉三角+树状数组
将纵向固定,每次在横向找两个点,计算其中间墓地的贡献答案,离散化后同一行的预处理个数,
树状数组内存储C[up[i]][k] * C[down[i][k] 的值,每次更新时 down[横坐标]++;
c[up[i]][k]*C[down[i]][k] - C[up[i]+1][k]*C[down[i]-1][k] 加入这个值即可
左右答案利用 lf(左侧点数)计算
详见代码
#include<bits/stdc++.h>
#define int long long
#define rep(i,x,y) for(register int i=x;i<=y;i++)
#define dec(i,x,y) for(register int i=x;i>=y;i--)
#define mod 2147483648LL
using namespace std;
const int W=;
inline int read(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;}int n,m,w,k,h[*W],allheng[*W],allshu[*W],down[*W],c[*W],C[W][],ans;
inline void change(int x,int d){for(int i=x;i<=*w;i+=i&(-i)) c[i]=(c[i]+d)%mod;return;}
inline int query(int x){int res=;for(int i=x;i;i-=i&(-i)) res=(res+c[i])%mod;return res;}
struct node{int x,y;}a[W];bool cmp(node a,node b){if(a.y==b.y)return a.x<b.x;return a.y<b.y;}
inline void getc(){C[][]=; rep(i,,w){C[i][]=;
rep(j,,min(i,k)) C[i][j]=(C[i-][j]+C[i-][j-])%mod;}}
inline int find(int x){
int l=,r=*w;while(l<=r){ int mid=(l+r)>>;
if(h[mid]<x) l=mid+;else if(x<h[mid]) r=mid-;else return mid;}}
#undef int
int main(){
#define int long long
//预处理和读入
n=read(),m=read(),w=read();
rep(i,,w) a[i].x=read(),a[i].y=read(),h[*i-]=a[i].x,h[*i]=a[i].y;
k=read(); getc(); sort(h+,h++*w); sort(a+,a++w,cmp);
rep(i,,w) allshu[find(a[i].x)]++,allheng[find(a[i].y)]++; int lf; rep(i,,w){
if(<i&&a[i-].y==a[i].y){ lf++;//左侧的点数
int t1=query(find(a[i].x)-)-query(find(a[i-].x));//纵向 区间内答案之和
int t2=C[lf][k]*C[allheng[find(a[i].y)]-lf][k];//横向
ans=(ans+t1*t2)%mod;}
else lf=; int ii=find(a[i].x);down[ii]++; //已经以乘积的形式放入树状数组
change(ii,(C[down[ii]][k]*C[allshu[ii]-down[ii]][k]-C[down[ii]-][k]*C[allshu[ii]-down[ii]+][k])%mod);}
if(ans<) ans+=mod;printf("%lld\n",ans);return ;}
luogu 2154 离散化+杨辉三角+树状数组的更多相关文章
- Java数组的应用:案例:杨辉三角,三维数组,字符串数组
//import java.util.Arrays; //包含Arrays //import java.util.Random; public class HelloWorld { public st ...
- 【bzoj3289】Mato的文件管理 离散化+莫队算法+树状数组
原文地址:http://www.cnblogs.com/GXZlegend/p/6805224.html 题目描述 Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份 ...
- [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)
[BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...
- P2344 奶牛抗议 离散化+前缀和+动态规划+树状数组
[题目背景] Generic Cow Protests, 2011 Feb [题目描述] 约翰家的N 头奶牛正在排队游行抗议.一些奶牛情绪激动,约翰测算下来,排在第i 位的奶牛的理智度为Ai,数字可正 ...
- 【Luogu】P2154虔诚的墓主人(树状数组)
题目链接 这题就是考虑我们有这样一个情况
- luogu P1972 [SDOI2009]HH的项链 |树状数组 或 莫队
题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链变得越来越长. ...
- luogu 2519 [HAOI2011]problem a 动态规划+树状数组
发现每一次 $[b[i]+1,n-a[i]]$ 这个区间的分数必须相同,否则不合法. 而一个相同的区间 $[l,r]$ 最多只能出现区间长度次. 于是,就得到了一个 $dp:$ 将每一种区间的出现次数 ...
- World is Exploding 树状数组+离散化
Given a sequence A with length n,count how many quadruple (a,b,c,d) satisfies: a≠b≠c≠d,1≤a<b≤n,1≤ ...
- 洛谷 P4396 (离散化+莫队+树状数组)
### 洛谷P4396 题目链接 ### 题目大意: 有 n 个整数组成的数组,m 次询问,每次询问中有四个参数 l ,r,a,b .问你在[l,r] 的区间内的所有数中,值属于[a,b] 的数的个 ...
随机推荐
- 0109 ubuntu nginx ssl
1. sudo apt-get install openssl libssl-dev # ./configure --with-http_stub_status_module --with-http_ ...
- 登陆验证AuthorizeAttribute
自定义验证,验证失败后:Response.Redirect.
- JavaScript面向对象—基本数据类型和引用数据类型的区别和变量及作用域(函数和变量)
基本类型和引用类型的值 ECMAScript 变量可能包含两种不同的数据类型的值:基本类型值和引用类型值. 基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置. 而引用 ...
- ibatisNet MERGE INTO ORA-00911: 无效字符
在sql工具中测试正常,放到代码中出现 “ORA-00911: 无效字符” 错误时,请检查sql语句是否有分号.
- Git—分支管理
Git—分支管理 分支学习:branch称为分支,默认仅有一个名为master的分支.一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支. branch相关常用 ...
- How to DUMP the vba code protected by Unviewable+ VBA?
原始出处:http://www.cnblogs.com/Charltsing/p/unviewable.html QQ: 564955427 Email: charltsing@gmail.com 有 ...
- (hdu 6024) Building Shops
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6024 Problem Description HDU’s n classrooms are on a ...
- auth mysql
DROP TABLE IF EXISTS tky_auth_role;CREATE TABLE tky_auth_role ( roleid MEDIUMINT (8) UNSIGNED NOT NU ...
- mysql 5.7 json
项目中使用的mysql5.6数据库,数据库表一张表中存的字段为blob类型的json串数据.性能压测中涉及该json串处理效率比较低,开发人员提到mysql5.7版本后json串提供了原生态的json ...
- idea下创建maven聚合(子父级)项目,多模块项目
IDEA下Maven多模块项目介绍和搭建 idea 创建maven聚合项目简洁教程(手把手入门,通俗易懂) 本人使用的是: intelj idea 创建聚合项目(典型web项目,包括子项目util.d ...