题目链接

  这题就是考虑我们有这样一个情况

aaarticlea/png;base64,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" alt="" width="188" height="165" />

  然后我们试图很方便地求出第三行第二个和第三个常青树之间所有点上下常青树的组合。

  考虑使用树状数组,一开始把数组平放在最底下,然后往上推。

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cctype>
#include<cstring>
#define maxn 200020
#define maxd 12
#define mod 2147483648
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} struct Tree{
long long x,y;
bool operator <(const Tree a)const{
if(x!=a.x) return x<a.x;
return y<a.y;
}
}q[maxn]; long long s[maxn*],cnt;
long long c[maxn][maxd]; long long tree[maxn*];
inline long long low(long long x){ return x&(-x); } inline void add(long long pos,long long lim,long long num){
while(pos<=lim){
tree[pos]+=num;
tree[pos]%=mod;
pos+=low(pos);
}
return;
} inline long long query(long long pos){
long long ans=;
while(pos){
ans+=tree[pos];
ans%=mod;
pos-=low(pos);
}
return ans;
} long long up[maxn],down[maxn];
long long lef[maxn],rig[maxn]; int main(){
long long m=read()+,n=read()+;
long long e=read();
for(long long i=;i<=e;++i){
q[i]=(Tree){read(),read()};
swap(q[i].x,q[i].y);
s[++cnt]=q[i].x; s[++cnt]=q[i].y;
}
sort(s+,s+cnt+);
long long size=unique(s+,s+cnt+)-s-;
for(long long i=;i<=e;++i){
q[i].x=lower_bound(s+,s+size+,q[i].x)-s;
q[i].y=lower_bound(s+,s+size+,q[i].y)-s;
}
sort(q+,q+e+);
for(long long i=;i<=e;++i){
up[q[i].y]++;
rig[q[i].x]++;
}
long long d=read();
for(long long i=;i<=e;++i) c[i][]=;
for(long long i=;i<=e;++i)
for(long long j=;j<=d;++j) c[i][j]=(c[i-][j]+c[i-][j-])%mod;
long long ans=;
for(long long i=;i<=e;++i){
if(q[i].x==q[i-].x&&i!=){
//printf("i=%d\nxi=%d yi=%d\n%d %d %d %d\n",i,q[i].x,q[i].y,lef[q[i].x],rig[q[i].x],query(q[i].y),query(q[i].y-q[i-1].y));
ans+=c[lef[q[i].x]][d]*c[rig[q[i].x]][d]*(query(q[i].y-)-query(q[i-].y))%mod;
} up[q[i].y]--; down[q[i].y]++;
lef[q[i].x]++; rig[q[i].x]--;
add(q[i].y,size,c[up[q[i].y]][d]*c[down[q[i].y]][d]-query(q[i].y)+query(q[i].y-));
}
printf("%lld\n",(ans%mod+mod)%mod);
return ;
}

【Luogu】P2154虔诚的墓主人(树状数组)的更多相关文章

  1. P2154 [SDOI2009]虔诚的墓主人 树状数组

    https://www.luogu.org/problemnew/show/P2154 题意 在一个坐标系中,有w(1e5)个点,这个图中空点的权值是正上,正下,正左,正右各取k个的排列组合情况.计算 ...

  2. BZOJ-1227 虔诚的墓主人 树状数组+离散化+组合数学

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MB Submit: 914 Solved: 431 [Submit][Statu ...

  3. [luogu2154 SDOI2009] 虔诚的墓主人(树状数组+组合数)

    传送门 Solution 显然每个点的权值可以由当前点上下左右的树的数量用组合数\(O(1)\)求出,但这样枚举会T 那么我们考虑一段连续区间,对于一行中两个常青树中间的部分左右树的数量一定,我们可用 ...

  4. Bzoj 1227: [SDOI2009]虔诚的墓主人 树状数组,离散化,组合数学

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 895  Solved: 422[Submit][Statu ...

  5. [luogu P2184] 贪婪大陆 [树状数组][线段树]

    题目背景 面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败……人类被蚂蚁们逼到了Greed Island上的一个海湾.现在,小FF的后方是一望无际的大海, 前方是变异了的超级蚂蚁. 小 ...

  6. LUOGU P2617 Dynamic Rankings(树状数组套主席树)

    传送门 解题思路 动态区间第\(k\)大,树状数组套主席树模板.树状数组的每个位置的意思的是每棵主席树的根,维护的是一个前缀和.然后询问的时候\(log\)个点一起做前缀和,一起移动.时空复杂度\(O ...

  7. LUOGU P2344 奶牛抗议 (树状数组优化dp)

    传送门 解题思路 树状数组优化dp,f[i]表示前i个奶牛的分组的个数,那么很容易得出$f[i]=\sum\limits_{1\leq j\leq i}f[j-1]*(sum[i]\ge sum[j- ...

  8. luogu SP8093 后缀自动机+树状数组+dfs序

    这题解法很多,简单说几个: 1. 线段树合并,时间复杂度是 $O(nlog^2n)$ 的. 2. 暴力跳 $fail,$ 时间复杂度 $O(n\sqrt n),$ 比较暴力. 3. 建立后缀树后在 $ ...

  9. luogu P1908 逆序对 |树状数组

    题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为"逆序对"的 ...

随机推荐

  1. OCCI的迭代修改

    传统的在执行多行DML(INSERT.UPDATE.DELETE)时,我们是多次调用executeUpdate():注意!当我们调用一次此函数时,则执行一次网络往返,当数据量大时则效率非常低.不过 O ...

  2. tcp文件下载客户端+服务端

    客户端: import socket if __name__ == '__main__': # 创建tcp客户端socket tcp_client_socket = socket.socket(soc ...

  3. Thymeleaf显示Map集合数据

    <select class="form-control zz-set-input-size" id="channel"> <option va ...

  4. 微信小程序开发入门学习(2):小程序的布局

    概述 小程序的布局采用了和Css3中相同的 flex(弹性布局)方式,使用方法也类似(只是属性名不同而已). 水平排列 默认是从左向右水平依次放置组件,从上到下依次放置组件. 任何可视组件都需要使用样 ...

  5. C++ Primer 学习笔记_Chapter4 数组和指针–指针

    一.什么是指针? 指针与迭代器一样,指针提供对其所指对象的间接访问,指针保存的是另一个对象的地址: string s("hello"); string *ps = &s; ...

  6. Python基础-字符串的使用

    基础知识 字符串解释:字符串是不可变的,所有元素赋值和切片赋值操作都是非法的,属于序列一种(字符串.元组.列表). 一.格式化字符串 (1).format()方法==str.format() 作用:将 ...

  7. 词向量1.md

    词向量 我们以句子分类为例,我们使用深度学习模型对句子进行分类,本质上这个模型的接受的舒服需要是数值型.因为文字是人们抽象出来的一个概念,这个 东西是不能被计算机直接理解的,我们需要人为的将这个文字转 ...

  8. 队列--数据结构与算法JavaScript描述(5)

    队列 Queue 概念 队列是一种列表,但队列只能在队尾插入元,在队首删除元素. 队列是一种先进先出的数据结构,用于存储按顺序排列的数据,被用在很多地方,比如提交操作系统执行的一系列进程.打印任务池等 ...

  9. 10,python开发之virtualenv与virtualenvwrapper

      在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程 ...

  10. 4.Mongodb数据查询2

    1.limit &skip (1)Limit 方法limit():用于读取指定数量的文档 语法: db.集合名称.find().limit(NUMBER) 参数NUMBER表示要获取文档的条数 ...