Codeforces 12D Ball cdq分治
裸的cdq, 没啥好说的, 要注意mid左边和mid右边的a相同的情况。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ull unsigned long long
using namespace std; const int N = 5e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ;
const double eps = 1e-; int n; struct node {
int a, b, c;
bool die;
} p[N], tmp[N]; bool cmpa(const node& x, const node& y) {
return x.a > y.a;
}
bool cmpb(const node& x, const node& y) {
return x.b > y.b;
} void cdq(int l, int r) {
if(l == r) return;
int mid = l + r >> ;
int v1 = p[mid].a, v2 = p[mid + ].a;
cdq(l, mid); cdq(mid + , r);
int mx = , mx2 = ;
for(int i = mid + , j = l; i <= r; i++) {
while(j <= mid && p[j].b > p[i].b) {
mx = max(mx, p[j].c);
if(p[j].a > v1) mx2 = max(mx2, p[j].c);
j++;
}
if(p[i].a == v1) {
if(mx2 > p[i].c) p[i].die = true;
} else {
if(mx > p[i].c) p[i].die = true;
}
}
int p1 = l, p2 = mid + , tot = l;
while(p1 <= mid && p2 <= r)
if(p[p1].b >= p[p2].b) tmp[tot++] = p[p1], p1++;
else tmp[tot++] = p[p2], p2++;
while(p1 <= mid) tmp[tot++] = p[p1], p1++;
while(p2 <= r) tmp[tot++] = p[p2], p2++;
for(int i = l; i <= r; i++) p[i] = tmp[i];
} int main() {
scanf("%d", &n);
for(int i = ; i <= n; i++) scanf("%d", &p[i].a);
for(int i = ; i <= n; i++) scanf("%d", &p[i].b);
for(int i = ; i <= n; i++) scanf("%d", &p[i].c);
int cnt = ;
sort(p + , p + + n, cmpa);
cdq(, n);
for(int i = ; i <= n; i++) if(p[i].die) cnt++;
printf("%d\n", cnt);
return ;
} /*
*/
Codeforces 12D Ball cdq分治的更多相关文章
- codeforces 12D Ball
codeforces 12D Ball 这道题有两种做法 一种用树状数组/线段树维护区间最值,一种用map维护折线,昨天我刚遇见了一道类似的用STL维护折线的题目: 392D Three Arrays ...
- Codeforces 848C (cdq分治)
Codeforces 848C Goodbye Souvenir Problem : 给一个长度为n的序列,有q个询问.一种询问是修改某个位置的数,另一种询问是询问一段区间,对于每一种值出现的最右端点 ...
- Codeforces 938G(cdq分治+可撤销并查集+线性基)
题意: 有一个无向连通图,支持三个操作: 1 x y d : 新建一条x和y的无向边,长度为d 2 x y :删除x和y之间的无向边 3 x y :询问x到y的所有路径中(可以绕环)最短的 ...
- codeforces 762E(cdq分治)
题意: n个电台,每个电台有三个属性xi, ri, fi.分别代表电台的坐标,电台的播报范围,以及播报的频率. 对于一对电台i, j,若min(ri, rj) >= |xi - xj|,那么他们 ...
- Codeforces 12D Ball(线段树)
N ladies attend the ball in the King's palace. Every lady can be described with three values: beauty ...
- Codeforces 12D Ball 树形阵列模拟3排序元素
主题链接:点击打开链接 #include<stdio.h> #include<iostream> #include<string.h> #include<se ...
- Codeforces 1045G AI robots [CDQ分治]
洛谷 Codeforces 简单的CDQ分治题. 由于对话要求互相看见,无法简单地用树套树切掉,考虑CDQ分治. 按视野从大到小排序,这样只要右边能看见左边就可以保证互相看见. 发现\(K\)固定,那 ...
- Codeforces 1093E Intersection of Permutations [CDQ分治]
洛谷 Codeforces 思路 一开始想到莫队+bitset,发现要T. 再想到分块+bitset,脑子一抽竟然直接开始写了,当然也T了. 最后发现这就是个裸的CDQ分治-- 发现\(a\)不变,可 ...
- Codeforces 848C Goodbye Souvenir [CDQ分治,二维数点]
洛谷 Codeforces 这题我写了四种做法-- 思路 不管做法怎样,思路都是一样的. 好吧,其实不一样,有细微的差别. 第一种 考虑位置\(x\)对区间\([l,r]\)有\(\pm x\)的贡献 ...
随机推荐
- 【转】STM32 - 程序跳转、中断、开关总中断
程序跳转注意: 1.如果跳转之前的程序A里有些中断没有关,在跳转之后程序B的中断触发,但程序B里没有定义中断响应函数,找不到地址会导致死机. 2.程序跳转前关总中断,程序跳转后开总中断(关总中断,只是 ...
- 【bzoj3994】 SDOI2015—约数个数和
http://www.lydsy.com/JudgeOnline/problem.php?id=3994 (题目链接) 题意 多组询问,给出${n,m}$,求${\sum_{i=1}^n\sum_{j ...
- asp.net连接数据库超时的解决办法
错误提示:“超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. ” 经过几天辛苦写的代码,终于实现了功能丰富的查询功能,但是使用的过 ...
- oracle数据库连接池查看
select username , count(*), machine from v$session where username is not null group by username, mac ...
- 图形化调试工具DDD
ubuntu安装DDD: sudo apt-get install ddd If you still need to compile it for some reason you should be ...
- 访问修饰符---java基础总结
- vue.js react.js angular.js三者比较
react和vue有许多相似之处,他们都有:1.使用虚拟DOM2.提供了响应式(reactive)和组件化(composable)的视图组件3.将注意力集中保持在核心库,而将其他功能如路由和全局状态管 ...
- POJ - 3436 ACM Computer Factory(最大流)
https://vjudge.net/problem/POJ-3436 题目描述: 正如你所知道的,ACM 竞赛中所有竞赛队伍使用的计算机必须是相同的,以保证参赛者在公平的环境下竞争.这就是所有这些 ...
- Django Book学习笔记(下)
Django的Session框架 对于Django加密,大致使用这样的格式: hashtype$salt$hash 原因? 一次哈希是一次单向的加密过程,你能容易地计算出一个给定值的哈希码,但是几乎不 ...
- 工欲善其事必先利其器,用Emmet提高HTML编写速度
HTML代码写起来很费事,因为它的标签多. 一种解决方法是采用模板,在别人写好的骨架内,填入自己的内容.还有一种很炫的方法----简写法. 常用的简写法,目前主要是Emmet和Haml两种.这两种简写 ...