2716: [Violet 3]天使玩偶

Time Limit: 80 Sec  Memory Limit: 128 MB
Submit: 1473  Solved: 621
[Submit][Status][Discuss]

Description

Input

Output

Sample Input & Output

样例过大,略

HINT

Source

[Submit][Status][Discuss]

CDQ分治,分类讨论拆绝对值的方式,分别查询最优值。

 #include <cstdio>
#include <cstring>
#include <algorithm> inline int nextChar(void) {
const int siz = ;
static char buf[siz];
static char *hd = buf + siz;
static char *tl = buf + siz;
if (hd == tl)
fread(hd = buf, , siz, stdin);
return int(*hd++);
} inline int nextInt(void) {
register int ret = ;
register int neg = false;
register int bit = nextChar();
for (; bit < ; bit = nextChar())
if (bit == '-')neg ^= true;
for (; bit > ; bit = nextChar())
ret = ret * + bit - ;
return neg ? -ret : ret;
} const int lim = ;
const int siz = ;
const int inf = ; int n, m; struct data {
int k, x, y, t, p;
inline friend bool operator <
(const data &a, const data &b) {
if (a.x != b.x)
return a.x < b.x;
else
return a.k < b.k;
}
}p[siz], s[siz], q[siz]; int ans[siz]; int now;
int bit[siz];
int tim[siz]; inline void add(int t, int k) {
for (; t < siz; t += t&-t)
if (bit[t] < k || tim[t] != now)
bit[t] = k, tim[t] = now;
} inline int ask(int t) {
int ret = -inf;
for (; t; t -= t&-t)
if (ret < bit[t] && tim[t] == now)
ret = bit[t];
return ret;
} void cdqSolve(int l, int r) {
if (l >= r)return; int mid = (l + r) >> ; cdqSolve(l, mid);
cdqSolve(mid + , r); int t1 = l, t2 = mid + , tot = l; while (t1 <= mid && t2 <= r) {
if (s[t1] < s[t2])
q[tot++] = s[t1++];
else
q[tot++] = s[t2++];
} while (t1 <= mid)
q[tot++] = s[t1++]; while (t2 <= r)
q[tot++] = s[t2++]; for (int i = l; i <= r; ++i)
s[i] = q[i]; ++now; for (int i = l; i <= r; ++i)
if (s[i].k && s[i].t > mid) {
int tmp = s[i].x + s[i].y - ask(s[i].y);
if (ans[s[i].p] > tmp)
ans[s[i].p] = tmp;
}
else if (!s[i].k && s[i].t <= mid)
add(s[i].y, s[i].x + s[i].y);
} inline void cdqSolve1(void) {
memcpy(s, p, sizeof(s));
cdqSolve(, n + m);
} inline void cdqSolve2(void) {
memcpy(s, p, sizeof(s));
for (int i = ; i <= n + m; ++i)
s[i].x = lim - s[i].x;
cdqSolve(, n + m);
} inline void cdqSolve3(void) {
memcpy(s, p, sizeof(s));
for (int i = ; i <= n + m; ++i)
s[i].y = lim - s[i].y;
cdqSolve(, n + m);
} inline void cdqSolve4(void) {
memcpy(s, p, sizeof(s));
for (int i = ; i <= n + m; ++i)
s[i].x = lim - s[i].x,
s[i].y = lim - s[i].y;
cdqSolve(, n + m);
} signed main(void) {
// freopen("in", "r", stdin);
// freopen("out", "w", stdout); n = nextInt();
m = nextInt(); for (int i = ; i <= n; ++i) {
p[i].x = nextInt();
p[i].y = nextInt();
p[i].k = ;
p[i].t = i;
} for (int i = ; i <= m; ++i) {
p[i + n].k = nextInt() - ;
p[i + n].x = nextInt();
p[i + n].y = nextInt();
p[i + n].t = i + n;
p[i + n].p = i;
} for (int i = ; i <= m; ++i)
ans[i] = inf; cdqSolve1();
cdqSolve2();
cdqSolve3();
cdqSolve4(); for (int i = ; i <= m; ++i)
if (p[i + n].k)printf("%d\n", ans[i]);
}

@Author: YouSiki

BZOJ 2716: [Violet 3]天使玩偶的更多相关文章

  1. BZOJ 2716: [Violet 3]天使玩偶( CDQ分治 + 树状数组 )

    先cdq分治, 然后要处理点对答案的贡献, 可以以询问点为中心分成4个区域, 然后去掉绝对值(4种情况讨论), 用BIT维护就行了. --------------------------------- ...

  2. bzoj 2716 [Violet 3]天使玩偶——KDtree

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2716 第三道KDtree!仍旧是模板.还有CDQ分治做法,见下面. 数组迷之开大?(开6e5 ...

  3. BZOJ 2716 [Violet 3]天使玩偶 (CDQ分治、树状数组)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2716 怎么KD树跑得都那么快啊..我写的CDQ分治被暴虐 做四遍CDQ分治,每次求一个 ...

  4. BZOJ 2716 [Violet 3]天使玩偶 ——KD-Tree

    [题目分析] KD-Tree的例题.同BZOJ2648. [代码] #include <cstdio> #include <cstring> #include <cstd ...

  5. BZOJ 2716 Violet 3 天使玩偶 CDQ分治

    题目大意:初始给定平面上的一个点集.提供两种操作: 1.将一个点增加点集 2.查询距离一个点最小的曼哈顿距离 K-D树是啥...不会写... 我仅仅会CDQ分治 对于一个询问,查询的点与这个点的位置关 ...

  6. bzoj 2716 [Violet 3]天使玩偶 【CDQ分治】

     KD-tree可做,但是我不会暂时不考虑 大意:在二维平面内,给定n个点,m个操作.操作A:加入一个点:操作B:询问一个点与平面上加入的点的最近距离 不封装会T不封装会T不封装会T不封装会T不封装会 ...

  7. bzoj 2648: SJY摆棋子&&2716: [Violet 3]天使玩偶 --kdtree

    2648: SJY摆棋子&&2716: [Violet 3]天使玩偶 Time Limit: 20 Sec  Memory Limit: 128 MB Description 这天,S ...

  8. BZOJ2648: SJY摆棋子&&2716: [Violet 3]天使玩偶

    BZOJ2648: SJY摆棋子 BZOJ2716: [Violet 3]天使玩偶 BZOJ氪金无极限... 其实这两道是同一题. 附上2648的题面: Description 这天,SJY显得无聊. ...

  9. 【BZOJ】2648: SJY摆棋子 & 2716: [Violet 3]天使玩偶(kdtree)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2716 http://www.lydsy.com/JudgeOnline/problem.php?id ...

随机推荐

  1. 工作中常用的js、jquery自定义扩展函数代码片段

    仅记录一些我工作中常用的自定义js函数. 1.获取URL请求参数 //根据URL获取Id function GetQueryString(name) { var reg = new RegExp(&q ...

  2. Mac下安装ElasticSearch

    简单记录一下安装ES的过程,给小小白们提供一下参考: 下载安装包 https://www.elastic.co/downloads/elasticsearch建议下载2.3.2版本,最新的5.0.0版 ...

  3. 如何在web中实现类似excel的表格控件

    Execl功能非常强大,内置的很多函数或公式可以大大提高对数据的加工处理能力.那么在web中有没有类似的控件呢?经过一番搜寻,发现handsontable具备了基本的excel功能支持公式,同时能对数 ...

  4. 微信小程序注册

    小程序是一种新的开放能力,可以在微信内被便捷地获取和传播,同时具有出色的使用体验.开发者可以根据平台提供的能力,快速地开发一个小程序. 开放内容包括: 1.开放注册范围:企业.政府.媒体.其他组织: ...

  5. 块级标签包含行内标签底部出现3px间隔的解决办法

    当块级标签(如div)内包含了行内标签(如img),则外层元素与内层元素底部会出现3px的间隔: 代码如下: <!doctype html> <html lang="en& ...

  6. Undefined symbols for architecture arm64解决方案

    在iOS开发中经常遇到的一个错误是Undefined symbols for architecture arm64,这个错误表示工程某些地方不支持arm64指令集.那我们应该怎么解决这个问题了?我们不 ...

  7. linux 环境下运行STS时 出现must be available in order to run STS

    linux 环境下运行ECLIPSE时 出现 “ A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be avai ...

  8. 【代码笔记】iOS-用户发布后能保存崩溃

    一,工程图. 二,代码. AppDelegate.m #import "AppDelegate.h" #import "RootViewController.h" ...

  9. Redis 与 数据库处理数据的两种模式

    Redis 是一个高性能的key-value数据库. redis的出现,很大程度补偿了memcached这类key-value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.它提供了Pyt ...

  10. Apache主配置文件httpd.conf 详解

    Apache的主配置文件:/etc/httpd/conf/httpd.conf 默认站点主目录:/var/www/html/ Apache服务器的配置信息全部存储在主配置文件/etc/httpd/co ...