CDQ分治求不知道多少维偏序 (持续更新 ]
求三维偏序的模板 :
//Author : 15owzLy1
//luogu3810.cpp
//2018 12 25 16:31:58
#include <cstdio>
#include <cstring>
#include <algorithm>
static char buf[],*p1=buf,*p2=buf;
inline char get_char() {
return p1==p2&&(p2=(p1=buf)+fread(buf,,,stdin),p1==p2)?EOF:*p1++;
}
inline int in() {
int x=;char c=get_char();
while(c<''||c>'')c=get_char();
while(c>=''&&c<='')x=(x<<)+(x<<)+(c^), c=get_char();
return x;
}
template<typename T>
inline void out(T &x) {
int cnt=;
static char s[];
do s[cnt++]=x%+; while(x/=);
while(cnt--) putchar(s[cnt]);
putchar('\n');
} const int N = (int)1e5+;
struct Triple {
int x, y, z, val, ans;
}a[N], tmp[N];
int n, k, ans[N]; inline bool cmp(const Triple &x, const Triple &y) {
if(x.x==y.x) return x.z==y.z?x.y<y.y:x.z<y.z;
return x.x<y.x;
} struct BinaryIndexedTree {
int t[N<<];
inline void insert(int p, int del) {for(;p<=k;p+=p&-p)t[p]+=del;}
inline int ask(int p) {int ret=;for(;p;p-=p&-p)ret+=t[p];return ret;}
}bit; void cdq(int l, int r) {
if(l==r) return ;
int mid=(l+r)>>;
cdq(l, mid); cdq(mid+, r);
int i=l, j=mid+, k=l;
while(i<=mid&&j<=r)
if(a[i].z<=a[j].z)
bit.insert(a[i].y, a[i].val), tmp[k++]=a[i++];
else
a[j].ans+=bit.ask(a[j].y), tmp[k++]=a[j++];
for(int p=j;p<=r;p++) a[p].ans+=bit.ask(a[p].y);
for(int p=l;p<i;p++) bit.insert(a[p].y, -a[p].val);
if(i<=mid) std::copy(a+i, a+mid+, tmp+k);
if(j<=r) std::copy(a+j, a+r+, tmp+k);
std::copy(tmp+l, tmp+r+, a+l);
} int main() {
int nn=in();
k=in();
for(int i=;i<=nn;i++)
tmp[i]=(Triple){in(), in(), in(), , }; std::sort(tmp+, tmp++nn, cmp);
for(int i=, cnt=;i<=nn;i++, cnt++)
if(tmp[i].x!=tmp[i+].x||tmp[i].y!=tmp[i+].y||tmp[i].z!=tmp[i+].z)
a[++n]=tmp[i], a[n].val=cnt, cnt=;
cdq(, n);
for(int i=;i<=n;i++) ans[a[i].ans+a[i].val-]+=a[i].val;
for(int i=;i<nn;i++) out(ans[i]);
return ;
}
CDQ分治求不知道多少维偏序 (持续更新 ]的更多相关文章
- CDQ分治嵌套模板:多维偏序问题
CDQ分治2 CDQ套CDQ:四维偏序问题 题目来源:COGS 2479 偏序 #define LEFT 0 #define RIGHT 1 struct Node{int a,b,c,d,bg;}; ...
- Educational Codeforces Round 41 967 E. Tufurama (CDQ分治 求 二维点数)
Educational Codeforces Round 41 (Rated for Div. 2) E. Tufurama (CDQ分治 求 二维点数) time limit per test 2 ...
- CDQ分治学习笔记(三维偏序题解)
首先肯定是要膜拜CDQ大佬的. 题目背景 这是一道模板题 可以使用bitset,CDQ分治,K-DTree等方式解决. 题目描述 有 nn 个元素,第 ii 个元素有 a_iai.b_ibi.c_ ...
- hdu5618(cdq分治求三维偏序)
题意:给n(n<=100000)个点,坐标为(xi,yi,zi)(1<=xi,yi,zi<=100000),定义一个点A比一个点B小,当且仅当xA<=xB,yA<=yB, ...
- BOI2007 Mokia | cdq分治求二维点数模板
题目链接:戳我 也没什么,其实主要就是为了存一个求二维坐标上矩形内点的个数的模板.为了之后咕咕咕地复习使用 不过需要注意的一点是,树状数组传x的时候可千万不要传0了!要不然会一直死循环的...qwqw ...
- SPOJ:Another Longest Increasing Subsequence Problem(CDQ分治求三维偏序)
Given a sequence of N pairs of integers, find the length of the longest increasing subsequence of it ...
- CDQ分治求前缀和
#include<bits/stdc++.h> using namespace std; ; int n,a_tot,q_tot,ans[N]; ]; struct query { int ...
- oracle运维(持续更新)
目录 简单命令使用 进入SQL*Plus 退出SQL*Plus 在sqlplus下得到帮助信息 显示表结构命令 DESCRIBE SQL*Plus 中的编辑命令 调用外部系统编辑器 运行命令文件 关于 ...
- MySQL日常运维操作---持续更新
1.查看当前连接数: 这些参数都是什么意思呢? Threads_cached ##mysql管理的线程池中还有多少可以被复用的资源 Threads_connected ##打开的连接数 Threads ...
随机推荐
- Spring Security(三十五):Part III. Testing
This section describes the testing support provided by Spring Security. 本节介绍Spring Security提供的测试支持. ...
- Thread类的其他方法,同步锁,死锁与递归锁,信号量,事件,条件,定时器,队列,Python标准模块--concurrent.futures
参考博客: https://www.cnblogs.com/xiao987334176/p/9046028.html 线程简述 什么是线程?线程是cpu调度的最小单位进程是资源分配的最小单位 进程和线 ...
- vue 2.0 + ElementUI构建树形表格
解决: 本来想在网上博客找一找解决方法,奈何百度到的结果都不尽人意,思维逻辑不清,步骤复杂,代码混乱,找了半天也没找到一个满意的,所以干脆就自己动手写一个 思路: table需要的数据是array,所 ...
- Numpy基本操作
NumPy:数组计算 NumPy是高性能科学计算和数据分析的基础包.它是Pandas等其他各种工具的基础 NumPy的主要功能: ndarray,一个多维数据结构,高校且节省空间 无需循环即可对整组数 ...
- python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例
进程池: 进程池的使用有四种方式:apply_async.apply.map_async.map.其中apply_async和map_async是异步的,也就是启动进程函数之后会继续执行后续的代码不用 ...
- Tomcat服务器下载、安装、配置环境变量教程(超详细)
请先配置安装好Java的环境,若没有安装,请参照我以下的步骤进行安装! 请先配置安装好Java的环境,若没有安装,请参照我以下的步骤进行安装! 请先配置安装好Java的环境,若没有安装,请参照我以下上 ...
- Servlet生命周期和注解配置
Servlet的生命周期和注解配置问题 /* Servlet? 运行在服务器上的小程序 定义浏览器访问到Tomcat的规则 一.生命周期? 1.创建 2.提供服务 3.被销毁 二.servlet3.0 ...
- 鼠标事件-MouseEvent【转】
原文地址> 鼠标事件-MouseEvent 当鼠标进行某种操作时,就会生成一个event对象,该对象记录着鼠标触发事件时的所有属性. 可以通过如下方法在google控制台打印出 MouseEve ...
- sopUI上手教程
1.新建项目 File-->New SOAP Project-->Project Name:填入项目名 Initial WSDL:填入项目的 web Services 2.添加WSDL ...
- [NOI2005]维护数列——平衡树观止
本题题解并不详细,不推荐大家看这一篇. 可以看这篇 题目描述 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格) 100%的数据中, ...