http://codeforces.com/problemset/problem/12/D

题意

给N (N<=500000)个点,每个点有x,y,z ( 0<= x,y,z <=10^9 )

对于某点(x,y,z),若存在一点(x1,y1,z1)使得x1 > x && y1 > y && z1 > z 则点(x,y,z)是特殊点。

问N个点中,有多少个特殊点。

乍一看以为是裸的三位偏序问题,直接联想到了cdq分治,但是事实上这题和三位偏序有很大的差异,三位偏序问题求的是偏序的组数,但这题问的是完全被小于的个数,cdq分治上很难维护一个点是否已经被“超越”过,也不需要这么麻烦的去维护,事实上一维将x从大到小排序,一维作为树状数组上点的位置,越大的位置在越靠前,一维就是树状数组维护的前缀最大值即可。

#include <map>
#include <set>
#include <ctime>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
#define For(i, x, y) for(int i=x;i<=y;i++)
#define _For(i, x, y) for(int i=x;i>=y;i--)
#define Mem(f, x) memset(f,x,sizeof(f))
#define Sca(x) scanf("%d", &x)
#define Sca2(x,y) scanf("%d%d",&x,&y)
#define Scl(x) scanf("%lld",&x);
#define Pri(x) printf("%d\n", x)
#define Prl(x) printf("%lld\n",x);
#define CLR(u) for(int i=0;i<=N;i++)u[i].clear();
#define LL long long
#define ULL unsigned long long
#define mp make_pair
#define PII pair<int,int>
#define PIL pair<int,long long>
#define PLL pair<long long,long long>
#define pb push_back
#define fi first
#define se second
typedef vector<int> VI;
const double eps = 1e-9;
const int maxn = 5e5 + 10;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
int N,M,tmp,K,cnt;
int Hash[maxn];
struct Node{int a,b,c;
}node[maxn];
bool cmp(Node a,Node b){return a.a > b.a;
}
int tree[maxn];
void add(int x,int y){for(;x <= cnt;x += x & -x) tree[x] = max(tree[x],y);
}
int getmax(int x){int s = 0;for(;x > 0;x -= x & -x) s = max(s,tree[x]);return s;
}
int main()
{Sca(N);For(i,1,N) scanf("%d",&node[i].a);For(i,1,N) scanf("%d",&node[i].b);For(i,1,N) scanf("%d",&node[i].c);For(i,1,N) Hash[i] = node[i].c;sort(Hash + 1,Hash + 1 + N);cnt = unique(Hash + 1,Hash + 1 + N) - Hash - 1;For(i,1,N) node[i].c = cnt + 1 - (lower_bound(Hash + 1,Hash + 1 + cnt,node[i].c) - Hash);sort(node + 1,node + 1 + N,cmp);int ans = 0;For(i,1,N){int j = i;while(j <= N && node[i].a == node[j].a) j++;j--;For(k,i,j){int t = getmax(node[k].c - 1);if(t > node[k].b) ans++;}For(k,i,j) add(node[k].c,node[k].b);i = j;}Pri(ans);#ifdef VSCodesystem("pause");#endifreturn 0;
}

转载于:https://www.cnblogs.com/Hugh-Locke/p/9614848.html

CodeForces12D 树状数组降维相关推荐

  1. 【HDU - 6447】YJJ's Salesman(降维dp,树状数组优化dp)

    题干: YJJ is a salesman who has traveled through western country. YJJ is always on journey. Either is ...

  2. 2019 南京 网络赛 B (二维偏序,树状数组离线)

    题意: 给出一N*N的蛇形矩阵,具体位置元素值不给你,自己找规律,然后给你M个 有效位置,P次查询,每次查询一个子矩阵中有效元素的权值和,该权值和等于对于 每个有效元素,模10拆分后相加得到的和.(注 ...

  3. 数星星 ← 树状数组

    [问题描述] 题目来源:1265. 数星星 - AcWing题库 天空中有一些星星,这些星星都在不同的位置,每个星星有个坐标. 如果一个星星的左下方(包含正左和正下)有 k 颗星星,就说这颗星星是 k ...

  4. 夜深人静写算法(三)- 树状数组

    目录   一.从图形学算法说起       1.Median Filter 概述       2.r pixel-Median Filter 算法 3.一维模型       4.数据结构的设计     ...

  5. 洛谷 P5057 [CQOI2006]简单题(树状数组)

    嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...

  6. Color the ball(HDU1556)树状数组

    每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...

  7. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  8. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)

    题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...

  9. poj_3067 树状数组

    题目大意 左右两个竖排,左边竖排有N个点,从上到下依次标记为1,2,...N; 右边竖排有M个点,从上到下依次标记为1,2....M.现在从K条直线分别连接左边一个点和右边一个点,求这K条直线的交点个 ...

最新文章

  1. Python数据类型 - set 集合
  2. USB Host Device And OTG
  3. 简单说说通讯设备的热设计
  4. 华南理工网络计算机基础知识,2019年华南理工大学网络教育计算机基础随堂练习题第一章.docx...
  5. pipedreader_Java PipedReader ready()方法与示例
  6. 基于JAVA+SpringBoot+Mybatis+MYSQL的园区招商管理系统
  7. SEO优化软件测试初学者,一款文章原创度检测工具,做seo的你应该需要!
  8. 赚自己的淘宝佣金,让返利网无路可走
  9. 黑客技术入门|“知已知彼,百战不殆”——踩点
  10. mac打开airplay(隔空播放)
  11. FLASH中button组件的selected和toggle属性解析
  12. ubuntu无法上网
  13. 开放接口/RESTful/Api服务的设计和安全方案详解
  14. 「书评」聊聊打CTF的那本书
  15. Day2补充:钢管切割问题
  16. 微软雅黑html中怎么写,网页中使用微软雅黑字体(css调用微软雅黑)
  17. 运维体系 ------ 技术运营
  18. 树莓派4B安装ubuntu18.04+ROS一条龙教程(手把手,新手推荐)
  19. Python - unittest单元测试框架(全)
  20. ERP:不该出现的反差(转)

热门文章

  1. js 两个数组对象合并成一个数组对象
  2. 在线文件预览工具kkFileView初体验
  3. JavaScript创建数组
  4. 系统编程概述(进程)
  5. 从局部到全局的多模式电影场景分割
  6. Linux下制作Windows启动U盘的工具
  7. 解决Vista/Server 2008/win 7 右下角网络连接出现黄色感叹号问题
  8. 【標題黨】揭开科学的骗局:水的组成根本不是氢和氧!
  9. Web精彩实战之“智能迷宫”
  10. Java正确实现单例模式