原题链接:http://codeforces.com/contest/12/problem/D
给一系列三维点(x,y,z)。求出满足以下条件的点个数: 对点 (x1,y1,z1 ) , 存在一个点 (x2,y2,z2) 使得 x2> x1, y2> y1, z2> z1。
先按 x 从大到小排序,再将 y 离散化。从前到向扫描,对于点(x,y,z), 在大于 y 的区间内找到最大的 z1,如果 z1> z, 则答案加 1.
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
int const N= 500100;
int tb[N<<2]= {0};
int n;
struct Node{
int x, y, z;
};
bool operator<( Node a, Node b ){
return a.x> b.x;
}
Node dat[N];
int num[N];
int query( int x, int y, int L, int R, int rt ){
if( x== L && y== R ) return tb[rt];
int mid= (L+ R)>>1;
if( y<= mid ) return query( x, y, L, mid, rt<<1 );
else if( x> mid ) return query( x, y, mid+ 1, R, rt<<1|1 );
else{
int a= query( x, mid, L, mid, rt<<1 );
int b= query( mid+ 1, y, mid+ 1, R, rt<<1|1 );
return max(a,b);
}
}
void update( int x, int d, int L, int R, int rt ){
if( L== R ){
tb[rt]= max( tb[rt], d );
return;
}
int mid= (L+ R)>>1;
if( x<= mid ) update( x, d, L, mid, rt<<1 );
else update( x, d, mid+ 1, R, rt<<1|1 );
tb[rt]= max( tb[rt<<1], tb[rt<<1|1] );
}
int main(){
scanf("%d", &n );
for( int i= 1; i<= n; ++i ) scanf("%d", &dat[i].x );
for( int i= 1; i<= n; ++i ){ scanf("%d", &dat[i].y ); num[i]= dat[i].y; }
for( int i= 1; i<= n; ++i ) scanf("%d", &dat[i].z );
sort( dat+ 1, dat+ 1+ n );
sort( num+ 1, num+ 1+ n );
int ans= 0, i, j, pre= 1;
for( i= 1; i<= n; i= j ){
for( j= i; j<= n && dat[j].x== dat[i].x; j++ ){
int pos= lower_bound( num+ 1, num+ 1+ n, dat[j].y )- num;
if( pos== n ) continue;
int Max= query( pos+ 1, n, 1, n, 1 );
if( Max> dat[j].z ) ans++;
}
for( j= i; j<= n && dat[j].x== dat[i].x; j++ ){
int pos= lower_bound( num+ 1, num+ 1+ n, dat[j].y )- num;
update( pos, dat[j].z, 1, n, 1 );
}
}
printf("%d\n", ans );
return 0;
}
分享到:
相关推荐
暴枚最长桌脚的长度$l$,然后长度比$l$长的桌脚全部都要砍掉长度比$l$短的桌脚选择代价前$k$小的砍掉用线段树维护;示例程序 :typedef long l
### 线段树题目详解 #### 1. 线段覆盖问题 - **ZOJ 1610** 和 **POJ 2777**:这两道题都是典型的线段覆盖问题,需要利用线段树来解决。基本思路是通过线段树维护每个区间是否被覆盖的状态。对于每个覆盖请求,更新...
Codeforces题库101-200介绍了一个在编程竞赛领域非常知名的平台——Codeforces。Codeforces是一个专注于计算机编程的俄罗斯网站,由一组来自萨拉托夫国立大学的竞技体育团队成员领导,由Mikhail Mirzayanov领导。该...
标题 "Codeforces 题库 001-100" 暗示了这里讨论的是Codeforces网站上的前100个编程竞赛题目。Codeforces是一个专注于算法竞赛编程的俄罗斯网站,由来自萨拉托夫国立大学的一群体育爱好者组成,以Mikhail Mirzayanov...
这题如果没有输出2个解就很简单。 是个之前做过的类型: 把所有限制按R排序, 然后每次取出R最小的,然后从其L开始选,尽量选能选的中最小的。 这样选如果能选完,就说明有解。 贪心正确性显然:R大的至少可以选则R...
打codeforces的神器
Codeforces是一个广受欢迎的在线编程竞赛平台,尤其在ACM(国际大学生程序设计竞赛)社区中备受推崇。这个“codeforces编程网站预测分数插件.zip”文件似乎包含了一个专为Codeforces用户设计的插件,旨在帮助参赛者...
Codeforces Enhancer 1.1.2是一款专为Google Chrome浏览器设计的插件,旨在提升用户在Codeforces编程竞赛平台上的体验。这个插件的主要目标是通过提供一系列实用功能,帮助程序员更有效地进行代码编写、测试和提交,...
根据提供的文档信息,我们可以推断出这是一份由许昊然撰写的Codeforces题目的解题报告。许昊然是国际信息学奥林匹克(IOI)2012年和2013年的金牌获得者,因此他的解题报告极具参考价值。下面我们将详细解读这份报告...
《Codeforces代码名称解析》 Codeforces是一个全球知名的在线编程竞赛平台,吸引了众多程序员和算法爱好者参与。这里的“codes_names_Codeforces_”标题暗示我们将探讨的是Codeforces平台上一些问题的代码名称。...
Codeforces 185A - Plant 全测试点49个 Codeforces 是一个在线编程平台,提供了大量的编程题目和比赛。其中,185A - Plant 是一个经典的题目,要求编写一个程序来解决植物生长的问题。 在这个题目中,输入是一个...
1. **基础数据结构**:数组、链表、栈、队列、树(二叉树、平衡树等)、图等,这些都是解决问题的基础工具。 2. **基本算法**:排序(快速排序、归并排序等)、搜索(二分查找、深度优先搜索、广度优先搜索等)。 ...
Codeforces全球第十轮比赛是编程竞赛平台Codeforces举办的一场线上编程比赛,旨在挑战参赛者的算法设计、逻辑思维和编程技巧。在这个比赛中,参赛者通常需要解决一系列算法问题,涵盖数据结构、图论、动态规划、数学...
Codeforces 19 E Fairy 是一道关于图论和二分图的编程竞赛题目。本题要求求解在给定的无向图中,通过删除一条边使得剩余的图成为一个二分图。首先,我们需要理解二分图的概念。二分图是指图中的节点可以分为两个互不...
一个Codeforces、牛客竞赛、AtCoder平台的编程竞赛查询插件,ACMer必备.zip
D题作为最难的一题,可能需要用到更复杂的数据结构,如平衡二叉搜索树或图。 2. **算法**:每道题目的解决方案通常基于特定的算法。常见的包括排序(快速排序、归并排序、冒泡排序等)、查找(线性查找、二分查找)...
codeforces-ACM竞赛题目-2833道.tgz
lucifer1004大佬的博客cf上分攻略故里大佬的githubcf思维题刷题数:44- (1421)codeforces 676 div2 A,B done
PDF-CodeForces问题 PDF文件中的CodeForces问题 利用CodeForces提取在这个库中的文件 ,文件夹名代表来自CodeForces网址contests`的ID,每个文件夹包含比赛的问题。 有关CodeForces竞赛的疯狂事实 CodeForces上有937...
Codeforces是一个全球知名的在线编程竞赛平台,吸引了众多程序员和编程爱好者参与。它的主要特点是定期举行比赛,用户可以在线提交代码,系统自动评测并给出结果。在这个过程中,掌握一些关键的编程技巧和策略对于...