bzoj 3262 陌上花开】的更多相关文章

Luogu 3810 & BZOJ 3263 陌上花开/三维偏序 | CDQ分治 题面 \(n\)个元素,每个元素有三个值:\(a_i\), \(b_i\) 和 \(c_i\).定义一个元素的偏序是三个值都小于等于它的值的元素的个数,对于\([0, n)\)的每个值\(i\),求偏序为\(i\)的元素个数. 题解 这道题我使用的是CDQ分治. 这道题有三个维度,每个维度都要对应一个数据结构/算法,来逐个击破. 首先,按照\(a\)从小到大把所有元素排序,保证\(a\)从小到大. 然后,对于第二维…
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当且仅当Sa>=Sb,Ca>=Cb,Ma>=Mb.显然,两朵花可能有同样的属性.需要统计出评出每个等级的花的数量. Input 第一行为N,K (1 <= N <= 100,000, 1 <= K <= 200,000 ), 分别表示花的数量和最大属性值. 以下N行,每…
题目链接 BZOJ3262 洛谷P3810 /* 5904kb 872ms 对于相邻x,y,z相同的元素要进行去重,并记录次数算入贡献(它们之间产生的答案是一样的,但不去重会..) */ #include <cstdio> #include <cctype> #include <algorithm> #define gc() getchar() #define lb(x) (x)&-(x) const int N=1e5+5; int n,Ans[N]; int…
[题目分析] 多维问题,我们可以按照其中一维排序,然后把这一维抽象的改为时间. 然后剩下两维,就像简单题那样,排序一维,树状数组一维,按照时间分治即可. 挺有套路的一种算法. 时间的抽象很巧妙. 同种的花需要处理,合并在一起计算即可. [代码] #include <cstdio> #include <cstring> #include <iostream> #include <vector> #include <algorithm> using…
本质是一个三维偏序,一位排序后cdq分治,一维在子函数里排序,一维用树状数组维护. 把三维相等的合并到一个里面. #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define N 100005 using namespace std; int n,k,m; struct node { int x,y,z,num,op; int yuan; bool oper…
= =原来复杂度还是nlog^2(n) Orz 被喷了 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<iostream> using namespace std; const int D=3e6; char in[D],*I=in,out[D],*O=out; inline int gint(){ ;||*I>;++I);…
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当且仅当Sa>=Sb,Ca>=Cb,Ma>=Mb.显然,两朵花可能有同样的属性.需要统计出评出每个等级的花的数量. Input 第一行为N,K (1 <= N <= 100,000, 1 <= K <= 200,000 ), 分别表示花的数量和最大属性值. 以下N行,每…
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另一朵花B要美丽,当且仅Sa>=Sb,Ca>=Cb,Ma>=Mb. 显然,两朵花可能有同样的属性.需要统计出评出每个等级的花的数量. Input 第一行为N,K (1 <= N <= 100,000, 1 <= K <= 200,000 ), 分别表示花的数量和最大属性值. 以下N…
这个题大部分人用了离散然后水之,然而.....作为一只蒟蒻我并没有想到离散,而是直接拿两个区间一个对应n,一个对应k来搞,当然这两个区间是对应的,我把第一维排序,第二维CDQ,第三维树状数组,然而由于我们二分第二维的时候他的区间[1,k]和数列区间[1,n]并不重合所以我们在二分第一个区间时对应二分第二个区间,注意我们二分地一个区间的时候由于相等的也会造成影响所以我把它搞了一个重复处理和二分的时候把中间的数抠出来,因为中间的数的确把第一维比他小且第二维比他小的数的比他小的第三维都搞完了,注意二分…
三维偏序 首先把所有花按 x一序,y二序,z三序 排序,然后去重,con记录同样的花的个数,然后进行cdq 现在假设有[l.r]区间,其中[l,mid] [mid+1,r],已经递归处理完毕.我们把区间[l,mid] [mid+1,r]按 y一序,z二序,x三序 排序,那么现在所有[l,mid]区间里的x比所有[mid+1,r]区间里的x要小,并且在 [l,mid] [mid+1,r]中y是递增的.那么现在考虑[l,mid]中对[mid+1,r]中有贡献的个数,即只需要维护z的大小关系即可.对此…