BZOJ1227或洛谷2154 [SDOI2009]虔诚的墓主人
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]虔诚的墓主人的更多相关文章
- [洛谷P2154] SDOI2009 虔诚的墓主人
问题描述 小W是一片新造公墓的管理人.公墓可以看成一块N×M的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地. 当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地. ...
- Luogu 2154 [SDOI2009]虔诚的墓主人
弄了很久,状态很烂…… 首先发现可用的点一共只有$1e5$个,所以可以离散化坐标来方便计算. 发现对于一个空格,设它的上.下.左.右分别有$u, d, l, r$个点,它产生的贡献是$\binom{u ...
- 【BZOJ1227】[SDOI2009]虔诚的墓主人(线段树)
[BZOJ1227][SDOI2009]虔诚的墓主人(线段树) 题面 BZOJ 洛谷 题解 显然发现答案就是对于每一个空位置,考虑上下左右各有多少棵树,然后就是这四个方向上树的数量中选\(K\)棵出来 ...
- BZOJ1227 SDOI2009 虔诚的墓主人【树状数组+组合数】【好题】*
BZOJ1227 SDOI2009 虔诚的墓主人 Description 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地. ...
- bzoj1227 [SDOI2009]虔诚的墓主人(组合公式+离散化+线段树)
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 803 Solved: 372[Submit][Statu ...
- bzoj1227 P2154 [SDOI2009]虔诚的墓主人
P2154 [SDOI2009]虔诚的墓主人 组合数学+离散化+树状数组 先看题,结合样例分析,易得每个墓地的虔诚度=C(正左几棵,k)*C(正右几棵,k)*C(正上几棵,k)*C(正下几棵,k),如 ...
- [BZOJ1227][SDOI2009]虔诚的墓主人 组合数+树状数组
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 1433 Solved: 672[Submit][Stat ...
- 【LG2154】[SDOI2009]虔诚的墓主人
[LG2154][SDOI2009]虔诚的墓主人 题面 洛谷 题解 如果您没有看懂题,请反复阅读题面及样例 可以发现,对于某一个点,它的答案就是上下左右几个组合数乘起来. 这样直接做复杂度显然爆炸,考 ...
- BZOJ 1227: [SDOI2009]虔诚的墓主人
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MBSubmit: 1078 Solved: 510[Submit][Stat ...
随机推荐
- 逻辑回归 logit
[方法转]http://www.powerxing.com/logistic-regression-in-python/ http://blog.csdn.net/lipengcn/article/d ...
- oracle 连接池参数
后来排查出数据库监听异常,发现是ORA-12519拒绝错误.后来发现是数据的连接池达到的极致. 具体解决方案如下: --首先检查process和session的使用情况,在sqlplus里面查看. S ...
- C++字符串和向量
陷阱:C字符串使用=和== char a_string[10]; a_string="Hello" 非法 strcpy(a_string,"Hello"); ...
- java课后作业总结
今天的课后作业是做一个查找一段文章中单词出现的概率,统计并 输出出现概率最高的几个单词.拿到题目,老师还是往常一样提醒着我们先分析题目,构建大概的编程思路.程序需要遇到文本文件的输入输出操作,这一直一 ...
- react+webpack+babel环境搭建
[react+webpack+babel环境搭建] 1.react官方文档推荐使用 babel-preset-react.babel-preset-es2015 两个perset. Babel官方文档 ...
- CGLIB代理基础
本文意在讲解CGLIB的基础使用及基本原理. 一.CGLIB的基本原理: 依赖ASM字节码工具,通过动态生成实现接口或继承类的类字节码,实现动态代理. 针对接口,生成实现接口的类,即implement ...
- linus jsch文件下载
package com.osplat.util;import java.io.File;import java.io.FileNotFoundException;import java.io.File ...
- java基本数据间转换
string=====>int int x = Integer.parseInt(“1111”); string=====>char char x = request.getParamet ...
- PHP判断是否都是中文
{ } }
- Vue之数据监听存在的问题
Vue之数据监听 当数据监听的是列表时,数据发生改变,不会被监听到. // 用$set修改数组中的数组能够被监听 // app.$set(this.hobby, 0, "爱你哦") ...