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 ...
随机推荐
- 学JS的心路历程-正规表达式Regular Expression
今天我们来看正规表达式,在谈到为什么需要多学这个之前,先来看个示例. 假设需要判断输入字串是否含有“apple”: var text=“A apple a day keeps the doctor a ...
- oracle 日志恢复数据
1:首先查找redo,如果redo有可供恢复的信息,就那redo中的信息进行恢复,此时一般在恢复时,类似如下:SQL> recover database;Media recovery compl ...
- work单进程群发通知 后面会增加Channel组件的分组推送以及集群推送篇章
<?phpuse Workerman\Worker;use Workerman\Lib\Timer; require_once '../../web/Workerman/Autoloader.p ...
- linux下arm汇编的常用指令解析
1. ldr 和 str : (1) ldr 作为指令,叫做寄存器加载指令.将内存中的值加载到寄存器中. (2) ldr 作为伪指令,实现一个32位常数或地址值加载到寄存器中.后面加载的常量或地址值标 ...
- 配置 redis 外网访问
redis采用的安全策略,默认会只准许本地访问 1 2 3 4 5 6 7 8 9 10 通过简单配置,完成允许外网访问 [root@cache01 conf]# egrep "(^bind ...
- sql 求max和min,但是第二大,第二小怎么算?
利用子查询,但这样速度较慢. SELECT Baoming.id, Baoming.addtime AS '报名时间', CONCAT(Members.realname,Members.usernam ...
- python-ceilometerclient命令行(2)
命令行解析工具argparse argparse是python标准库中的模块,利用argparse,可以完成对命令行的参数定义.解析以及后续的处理.一个简单的例子: # coding:utf-8 im ...
- html开发环境
标签(空格分隔): 环境 开发环境: 市面上有很多的HTML编辑器可以选择,常见的Hbuild.Sublime Text.Dreamweare都可以用来开发HTML. 当然PyCharm也支持HTML ...
- 修复回写PR时到料日期重复扣减检验周期的问题:
问题描述: 修复回写PR时到料日期重复扣减检验周期的问题:系统回写的外购半成品PR交货日期未按采购周期回写,从8-10日开始均于10天交期回写,例以下9-5日今天回写的PR,采购周期12天,结果回写到 ...
- iframe解决ajax主域和子域之间的跨域问题
在某些应用场景下,需要在主域中,调用子域中的某个接口,如果直接在主域中向子域发ajax请求,会报跨域错误,可以用iframe来解决这种跨域问题.假如主域为www.baidu.com,子域为baike. ...