BZOJ原题链接

洛谷原题链接

又是扫描线,题解可看大佬的博客(太懒了不想打)

#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
const long long mod = 2147483648LL;
struct dd {
int x, y;
};
dd a[N];
int ls_x[N], ls_y[N], sx[N], sy[N], S[N], C[N][12], nwy[N], la[N], xl, yl;
inline int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c < '0' || c > '9'; c = getchar())
p |= c == '-';
for (; c >= '0' && c <= '9'; c = getchar())
x = x * 10 + c - '0';
return p ? -x : x;
}
inline int MOD(long long x)
{
if (x < mod)
return x;
return x % mod;
}
inline int lowbit(int x) { return x & -x; }
inline void add(int x, int y)
{
for (; x <= yl; x += lowbit(x))
S[x] = MOD(1LL * S[x] + y);
}
inline int ask(int x)
{
int s = 0;
for (; x; x -= lowbit(x))
s = MOD(1LL * s + S[x]);
return s;
}
bool comp(dd x, dd y)
{
if (!(x.x ^ y.x))
return x.y < y.y;
return x.x < y.x;
}
inline int minn(int x, int y) { return x < y ? x : y; }
inline int BSX(int x)
{
int l = 1, r = xl, mid;
while (l <= r)
{
mid = (l + r) >> 1;
if (!(ls_x[mid] ^ x))
return mid;
ls_x[mid] > x ? r = mid - 1 : l = mid + 1;
}
return 0;
}
inline int BSY(int x)
{
int l = 1, r = yl, mid;
while (l <= r)
{
mid = (l + r) >> 1;
if (!(ls_y[mid] ^ x))
return mid;
ls_y[mid] > x ? r = mid - 1 : l = mid + 1;
}
return 0;
}
int main()
{
int i, j, n, m, s, o, v, an = 0;
re(); re();
n = re();
for (i = 1; i <= n; i++)
{
ls_x[i] = a[i].x = re() + 1;
ls_y[i] = a[i].y = re() + 1;
}
m = re();
sort(ls_x + 1, ls_x + n + 1);
sort(ls_y + 1, ls_y + n + 1);
ls_x[n + 1] = ls_y[n + 1] = -1;
for (i = 1; i <= n; i++)
if (ls_x[i] ^ ls_x[i + 1])
ls_x[++xl] = ls_x[i];
for (i = 1; i <= n; i++)
if (ls_y[i] ^ ls_y[i + 1])
ls_y[++yl] = ls_y[i];
for (i = 1; i <= n; i++)
{
a[i].x = BSX(a[i].x);
a[i].y = BSY(a[i].y);
sx[a[i].x]++;
sy[a[i].y]++;
}
sort(a + 1, a + n + 1, comp);
for (C[0][0] = 1, i = 1; i <= n; i++)
for (j = C[i][0] = 1, o = minn(i, m); j <= o; j++)
C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
for (i = 1; i <= n; i++)
{
if (a[i].x ^ a[i - 1].x)
s = 0;
else
{
s++;
an = MOD(an + MOD(1LL * MOD(1LL * ask(a[i].y - 1) - ask(a[i - 1].y)) * MOD(1LL * C[s][m] * C[sx[a[i].x] - s][m])));
}
nwy[o = a[i].y]++;
v = MOD(1LL * C[nwy[o]][m] * C[sy[o] - nwy[o]][m]);
add(o, v - la[o]);
la[o] = v;
}
printf("%lld", (1LL * an + mod) % mod);
return 0;
}

BZOJ1227或洛谷2154 [SDOI2009]虔诚的墓主人的更多相关文章

  1. [洛谷P2154] SDOI2009 虔诚的墓主人

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

  2. Luogu 2154 [SDOI2009]虔诚的墓主人

    弄了很久,状态很烂…… 首先发现可用的点一共只有$1e5$个,所以可以离散化坐标来方便计算. 发现对于一个空格,设它的上.下.左.右分别有$u, d, l, r$个点,它产生的贡献是$\binom{u ...

  3. 【BZOJ1227】[SDOI2009]虔诚的墓主人(线段树)

    [BZOJ1227][SDOI2009]虔诚的墓主人(线段树) 题面 BZOJ 洛谷 题解 显然发现答案就是对于每一个空位置,考虑上下左右各有多少棵树,然后就是这四个方向上树的数量中选\(K\)棵出来 ...

  4. BZOJ1227 SDOI2009 虔诚的墓主人【树状数组+组合数】【好题】*

    BZOJ1227 SDOI2009 虔诚的墓主人 Description 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地. ...

  5. bzoj1227 [SDOI2009]虔诚的墓主人(组合公式+离散化+线段树)

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

  6. bzoj1227 P2154 [SDOI2009]虔诚的墓主人

    P2154 [SDOI2009]虔诚的墓主人 组合数学+离散化+树状数组 先看题,结合样例分析,易得每个墓地的虔诚度=C(正左几棵,k)*C(正右几棵,k)*C(正上几棵,k)*C(正下几棵,k),如 ...

  7. [BZOJ1227][SDOI2009]虔诚的墓主人 组合数+树状数组

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 1433  Solved: 672[Submit][Stat ...

  8. 【LG2154】[SDOI2009]虔诚的墓主人

    [LG2154][SDOI2009]虔诚的墓主人 题面 洛谷 题解 如果您没有看懂题,请反复阅读题面及样例 可以发现,对于某一个点,它的答案就是上下左右几个组合数乘起来. 这样直接做复杂度显然爆炸,考 ...

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

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 1078  Solved: 510[Submit][Stat ...

随机推荐

  1. Spark之机器学习(Python版)(一)——聚类

    https://www.cnblogs.com/charlotte77/p/5437611.html

  2. 利用等概率Rand5产生等概率Rand3(转)

    问题本身很明确,但不知道起个什么题目好,姑且先这么说吧. 问题描述:现在有一个叫做Rand5的函数,可以生成等概率的[0, 5)范围内的随机整数,要求利用此函数写一个Rand3函数(除此之外,不能再使 ...

  3. SQL思维导图总结

  4. cv2.SIFT() AttributeError: 'module' object has no attribute 'SIFT' OpenCV Python can't use SURF, SIFT

    参考链接: https://stackoverflow.com/questions/18561910/opencv-python-cant-use-surf-sift For recent infor ...

  5. java.security.MessageDigest (1)

    我们知道,编程中数据的传输,保存,为了考虑安全性的问题,需要将数据进行加密.我们拿数据库做例子.如果一个用户注册系统的数据库,没有对用户的信息进行保存,如,我去页面注册,输入"Vicky&q ...

  6. Unity&UGUI

    UI:User Interface 用户交互接口,处理用户与程序直接的交互 新建一个UI控件,都会同时新建两个物体: --Canvas:画布,所有的UI控件都必须放到画布上 --EnventSyste ...

  7. flashfxp key密钥

    flashfxp3.41中文版注册码:(适合最新版本) 推荐(尚未被封的 Realkey) FLASHFXPvACq2ssbvAAAAAC1W7cJKQTzmx77zmqJICvA7d3WnUtWNX ...

  8. Numpy数据处理函数

    Numpy函数介绍 import numpy as np #sqrt 计算各元素的平方根 arr = np.arange(10) np.sqrt(arr) array([0. , 1. , 1.414 ...

  9. 利用反射绑定事件处理程序(C#)

    利用反射绑定事件处理程序(C#) 传统的写法:强类型的情况下 using System;using System.Collections.Generic;using System.Text; usin ...

  10. 最小k度限制生成树

    [题目描述] 给你一个图,n个点,m条边,求一颗生成树满足如下条件: (1)结点1的度不超过k. (2)在(1)条件下所求生成树最小. [算法引入] 最小k度限制生成树,就是指有特殊的某一点的度不能超 ...