`
darren_nizna
  • 浏览: 72583 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

[codeforces][ball][线段树]

J# 
阅读更多

原题链接: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;
}
1
4
分享到:
评论

相关推荐

    linkfqy#CSDN_blog_backup#【贪心+线段树】Codeforces 557C Arthur and Tabl

    暴枚最长桌脚的长度$l$,然后长度比$l$长的桌脚全部都要砍掉长度比$l$短的桌脚选择代价前$k$小的砍掉用线段树维护;示例程序 :typedef long l

    线段树题目

    ### 线段树题目详解 #### 1. 线段覆盖问题 - **ZOJ 1610** 和 **POJ 2777**:这两道题都是典型的线段覆盖问题,需要利用线段树来解决。基本思路是通过线段树维护每个区间是否被覆盖的状态。对于每个覆盖请求,更新...

    Codeforces 题库 101-200

    Codeforces题库101-200介绍了一个在编程竞赛领域非常知名的平台——Codeforces。Codeforces是一个专注于计算机编程的俄罗斯网站,由一组来自萨拉托夫国立大学的竞技体育团队成员领导,由Mikhail Mirzayanov领导。该...

    Codeforces 题库 001-100

    标题 "Codeforces 题库 001-100" 暗示了这里讨论的是Codeforces网站上的前100个编程竞赛题目。Codeforces是一个专注于算法竞赛编程的俄罗斯网站,由来自萨拉托夫国立大学的一群体育爱好者组成,以Mikhail Mirzayanov...

    CodeForces_1348EF – Phoenix and Memory 贪心+线段树找区间最小值

    这题如果没有输出2个解就很简单。 是个之前做过的类型: 把所有限制按R排序, 然后每次取出R最小的,然后从其L开始选,尽量选能选的中最小的。 这样选如果能选完,就说明有解。 贪心正确性显然:R大的至少可以选则R...

    打codeforces的神器

    打codeforces的神器

    codeforces编程网站预测分数插件.zip

    Codeforces是一个广受欢迎的在线编程竞赛平台,尤其在ACM(国际大学生程序设计竞赛)社区中备受推崇。这个“codeforces编程网站预测分数插件.zip”文件似乎包含了一个专为Codeforces用户设计的插件,旨在帮助参赛者...

    codeforces enhancer 1.1.2

    Codeforces Enhancer 1.1.2是一款专为Google Chrome浏览器设计的插件,旨在提升用户在Codeforces编程竞赛平台上的体验。这个插件的主要目标是通过提供一系列实用功能,帮助程序员更有效地进行代码编写、测试和提交,...

    Codeforces题目泛做解题报告许昊然.pdf

    根据提供的文档信息,我们可以推断出这是一份由许昊然撰写的Codeforces题目的解题报告。许昊然是国际信息学奥林匹克(IOI)2012年和2013年的金牌获得者,因此他的解题报告极具参考价值。下面我们将详细解读这份报告...

    Codeforces codes_names_Codeforces_

    《Codeforces代码名称解析》 Codeforces是一个全球知名的在线编程竞赛平台,吸引了众多程序员和算法爱好者参与。这里的“codes_names_Codeforces_”标题暗示我们将探讨的是Codeforces平台上一些问题的代码名称。...

    Codeforces 185A - Plant 全测试点49个

    Codeforces 185A - Plant 全测试点49个 Codeforces 是一个在线编程平台,提供了大量的编程题目和比赛。其中,185A - Plant 是一个经典的题目,要求编写一个程序来解决植物生长的问题。 在这个题目中,输入是一个...

    codeforces比赛代码

    1. **基础数据结构**:数组、链表、栈、队列、树(二叉树、平衡树等)、图等,这些都是解决问题的基础工具。 2. **基本算法**:排序(快速排序、归并排序等)、搜索(二分查找、深度优先搜索、广度优先搜索等)。 ...

    Codeforces global round 10_Codeforces_

    Codeforces全球第十轮比赛是编程竞赛平台Codeforces举办的一场线上编程比赛,旨在挑战参赛者的算法设计、逻辑思维和编程技巧。在这个比赛中,参赛者通常需要解决一系列算法问题,涵盖数据结构、图论、动态规划、数学...

    codeforces 19 E Fairy 解题报告

    Codeforces 19 E Fairy 是一道关于图论和二分图的编程竞赛题目。本题要求求解在给定的无向图中,通过删除一条边使得剩余的图成为一个二分图。首先,我们需要理解二分图的概念。二分图是指图中的节点可以分为两个互不...

    一个Codeforces、牛客竞赛、AtCoder平台的编程竞赛查询插件,ACMer必备.zip

    一个Codeforces、牛客竞赛、AtCoder平台的编程竞赛查询插件,ACMer必备.zip

    Codeforces round 678 D2_Codeforces_

    D题作为最难的一题,可能需要用到更复杂的数据结构,如平衡二叉搜索树或图。 2. **算法**:每道题目的解决方案通常基于特定的算法。常见的包括排序(快速排序、归并排序、冒泡排序等)、查找(线性查找、二分查找)...

    codeforces-ACM竞赛题目-2833道.tgz

    codeforces-ACM竞赛题目-2833道.tgz

    Xudong0722#Algorithm_template#codeforces思维题训练合集1

    lucifer1004大佬的博客cf上分攻略故里大佬的githubcf思维题刷题数:44- (1421)codeforces 676 div2 A,B done

    PDF-CodeForces-Problems:PDF文件中的CodeForces问题

    PDF-CodeForces问题 PDF文件中的CodeForces问题 利用CodeForces提取在这个库中的文件 ,文件夹名代表来自CodeForces网址contests`的ID,每个文件夹包含比赛的问题。 有关CodeForces竞赛的疯狂事实 CodeForces上有937...

    codeforces:Codeforces提交

    Codeforces是一个全球知名的在线编程竞赛平台,吸引了众多程序员和编程爱好者参与。它的主要特点是定期举行比赛,用户可以在线提交代码,系统自动评测并给出结果。在这个过程中,掌握一些关键的编程技巧和策略对于...

Global site tag (gtag.js) - Google Analytics