疯狂re 换了一种写法才过。。。

思路:将x轴离散化,处理出来每个点上下左右一个有多少个点, 对于同一行的两个点来说,他们之间的

这些空的点都是可以一起算的,我们用树状数组按y轴从小到大维护 每一列的贡献和。。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int,int>
#define piii pair<int, pair<int,int> >using namespace std;const int N = 1e5 + 10;
const int M = 1e5 + 7;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-6;int x[N], y[N], tot1, tot2, n, m, w, k,f[N][11], sum[N];struct Bit {int a[N];void modify(int x, int v) {for(int i = x; i <= tot1; i += i & -i) {a[i] += v;}}int sum(int x) {int ans = 0;for(int i = x; i; i -= i & -i) {ans += a[i];}return ans;}int query(int l, int r) {r = min(tot1, r);if(l > r) return 0;return sum(r) - sum(l - 1);}}bit;struct Point {Point(int x = 0, int y = 0) {this -> x = x;this -> y = y;}int x, y, l, r, u, d;bool operator < (const Point &rhs) const {if(y == rhs.y) return x < rhs.x;return y < rhs.y;}
}p[N];vector<Point> v[N];int C(int a, int b) {return f[a][b];
}void init() {p[0].y = -1; p[w + 1].y = -1;for(int i = 0; i < N; i++) {for(int j = 0; j <= 10 && j <= i; j++) {if(!j || j == i) f[i][j] = 1;else f[i][j] = f[i - 1][j] + f[i - 1][j - 1];}}
}int main() {scanf("%d%d%d", &n, &m, &w);init();for(int i = 1; i <= w; i++) {scanf("%d%d", &p[i].x, &p[i].y);x[++tot1] = p[i].x;y[++tot2] = p[i].y;}scanf("%d", &k);sort(x + 1, x + tot1 + 1); tot1 = unique(x + 1, x + tot1 + 1) - x - 1;sort(y + 1, y + tot2 + 1); tot2 = unique(y + 1, y + tot2 + 1) - y - 1;sort(p + 1, p + w + 1);for(int i = 1; i <= w; i++) p[i].x = lower_bound(x + 1, x + tot1 + 1, p[i].x) - x;int ans = 0, tmp = 0;for(int i = 1; i <= w; i++) {if(p[i].y == p[i -1].y) tmp++;else tmp = 1;p[i].l = tmp;sum[p[i].x]++;p[i].u = sum[p[i].x];}tmp = 0;for(int i = w; i >= 1; i--) {if(p[i].y == p[i + 1].y) tmp++;else tmp = 1;p[i].r = tmp; p[i].d = sum[p[i].x] - p[i].u;}for(int i = 1; i <= w; i++) {bit.modify(p[i].x, C(p[i].u, k) * C(p[i].d, k) - bit.query(p[i].x, p[i].x));if(i > 1 && p[i].y == p[i - 1].y)ans += C(p[i - 1].l, k) * C(p[i].r, k) * bit.query(p[i - 1].x + 1, p[i].x - 1);}printf("%d\n", ans & 2147483647);return 0;
}/*
*/

转载于:https://www.cnblogs.com/CJLHY/p/9129627.html

bzoj 1227 [SDOI2009]虔诚的墓主人相关推荐

  1. 1227: [SDOI2009]虔诚的墓主人

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MB Submit: 1083  Solved: 514 [Submit][St ...

  2. BZOJ1227 [SDOI2009]虔诚的墓主人 【树状数组】

    题目 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地.为 ...

  3. bzoj1227: [SDOI2009]虔诚的墓主人(树状数组,组合数)

    传送门 首先,对于每一块墓地,如果上下左右各有$a,b,c,d$棵树,那么总的虔诚度就是$C_k^a*C_k^b*C_k^c*C_k^d$ 那么我们先把所有的点都给离散,然后按$x$为第一关键字,$y ...

  4. [SDOI2009]虔诚的墓主人

    这个题是今天上午模拟赛做的,考场上代码最后时间紧写得巨丑,所以改完以后还是巨丑 80分做法 这是考场上写的,然而数学实在太渣,不知道在模数下不能做除法,组合数部分写ci了 组合数预处理 首先都知道组合 ...

  5. 虔诚的墓主人(bzoj 1227)

    Description 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前为自己 ...

  6. 【SDOI2009】【BZOJ1227】虔诚的墓主人

    Description 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前为自己 ...

  7. BZOJ 1875[SDOI2009]HH去散步

    题面: 1875: [SDOI2009]HH去散步 Time Limit: 20 Sec  Memory Limit: 64 MB Submit: 1750  Solved: 851 [Submit] ...

  8. BZOJ 1878: [SDOI2009]HH的项链

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 3548  Solved: 1757 [Submit][Sta ...

  9. BZOJ 1878: [SDOI2009]HH的项链( BIT )

    离线处理 , 记下询问的左右端点并排序 , 然后可以利用树状数组 , 保证查询区间时每种颜色只计算一次 ------------------------------------------------ ...

最新文章

  1. c语言农夫过河游戏代码解释,农夫过河C++代码
  2. SpringBoot 自定义Kafka消息序列化和反序列化
  3. B1有个自定义表操作慢
  4. 2019编译ffepeg vs_如何在windows10下使用vs2017编译最新版本的FFmpeg和ffplay
  5. 如何进入embl的ebi网站fasta3服务器,The EMBL-EBI bioinformatics web and programmatic tools framework...
  6. ndk linux 最新版本,NDK各版本下载
  7. x264 scan8存储分析
  8. web跨域问题解决方案
  9. 使用vue element-ui 打印组件
  10. c语言大华面试题,大华股份的一道笔试题 C/C++
  11. 单片机加减法C语言,单片机的加减法原理
  12. 汽车如何打蜡 汽车打蜡有什么要注意的地方
  13. springboot 之 Starter
  14. 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
  15. 女孩学医好还是学计算机好,女生选择学医好吗 学医有多累
  16. 怎么样导包测试JavaWeb代码?
  17. SDP offer-answer协商原则
  18. 奖学金用计算机怎表达,奖学金感谢信怎么写
  19. github上优秀的第三方开元库整理
  20. realtek高清晰音频管理器没有声音设置?

热门文章

  1. asp.net core 2.0 api ajax跨域问题
  2. 帝国CMS标签 总结2
  3. 2014校招 百度试题及答案
  4. android 栈溢出 检查,安卓源码编译完成后打包时出现栈溢出,求大家解决
  5. 老男孩python爬虫视频教程_python爬虫入门
  6. JDK1.8 HashMap 深入理解
  7. (04)System Verilog 利用函数通用总线激励驱动方法
  8. java 基础做增删改查教学_Java Mybatis 增删改查 简单使用 入门 简版
  9. 7003.node.js环境搭建及三方软件包
  10. 【蓝桥杯单片机】PWM(LED亮度调节)