二维偏序 tree】的更多相关文章

tree(二维偏序) 最近接触到一些偏序的东西. 传统线段树非叶子节点的划分点mid=(l+r)/2,但小R线段树mid是自己定的.但满足l<=mid<r,其余条件同原来线段树.那么不难发现如下性质:1.该线段树的节点个数依然为2N-1.2.该线段树深度可能会超过O(logn).3.该线段树区间定位所包含的线段树节点个数可能超过O(logn).但区间定位的结果依然是唯一的.小R给你这样一个小R线段树,每次询问给定区间的区间定位个数. ​ 这道题n和询问个数都到了1e5,所以考虑nlogn的做法…
P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链变得越来越长.有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答……因为项链实在是太长了.于是,他只好求助睿智的你,来解决这个问题. 输入格式 第一行:一个整数N,表示项链的长度. 第二行:N 个整数,表示依次表示项链中贝…
传送门 https://www.luogu.org/problemnew/show/P4479 题目描述 在平面直角坐标系上,有 n 个不同的点.任意两个不同的点确定了一条直线.请求出所有斜率存在的直线按斜率从大到小排序后,第 k 条直线的斜率为多少. 为了避免精度误差,请输出斜率向下取整后的结果.(例如: ⌊1.5⌋ = 1 , ⌊−1.5⌋ = −2 ) 分析 一开始打了一个暴力,10分后来改着改着成了30分,浮点误差. 正解其实很简单,我们首先逆向思考一下,如果我们假设已经有了斜率k. 如…
题意:第一象限有n个点,你从x正半轴任选一个位置出发,vy恒定,vx可以任意变化,不过只能在-vy/r到vy/r之间变化,问你最多能经过多少个点. 暴力dp是n^2,不可取. 注意到,一个点,所能到达它的点,是它后面一个张角内的所有点.这个张角很容易算出. 于是可以将这些点全部映射到一个新的坐标系内,使得这个坐标系内每个点左下方的点都是能到达它的点.(没必要真的算出那些真的变换后的坐标,可以以到那个虚拟张角的两条边的距离作为坐标,这样虽然扭曲了一点,但不影响答案.) 于是转化成了二维偏序问题,可…
/* CDQ分治的对象是时间. 即对于一个时间段[L, R],我们取mid = (L + R) / 2. 分治的每层只考虑mid之前的修改对mid之后的查询的贡献,然后递归到[L,mid],(mid,R]. 显然,CDQ分治是一种离线算法,我们需要将所有的修改/查询存下来,一起进行操作. 同时,CDQ分治还需要满足:操作之间相互独立,即一个操作的存在不会影响到另一个操作的存在. 经典入门题 单点修改 矩形查询 如果此题矩形小一点的话 可以使用树状数组套线段树 但是矩形过大时就不适用了 这里可以将…
Description Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个数(i, j) 表示(1 <= i <= n, 1 <= j <= m). Byte City里有一条公交线, 在某一些路口设置了公交站点. 公交车从 (1, 1) 发车, 在(n, m)结束.公交车只能往北或往东走. 现在有一些乘客在某些站点等车. 公交车司机希望在路线中能接到尽量多…
既然题目中的要求满足二维偏序,那么我们很自然地想到将所有东西(草和牛)都读进来之后,对一维(美味度)排序,然后在另一维(价值)中取当前最小的. 于是,Splay.mutiset.权值分块什么的都支持查询后继呢. #include<cstdio> #include<cmath> #include<algorithm> using namespace std; ],f,c; inline void R(int &x){ c=;f=; ; ;c>=)+=(c-'…
经典问题:二维偏序.给定平面中的n个点,求每个点左下方的点的个数. 因为 所有点已经以y为第一关键字,x为第二关键字排好序,所以我们按读入顺序处理,仅仅需要计算x坐标小于<=某个点的点有多少个就行. 这就是所说的:n维偏序,一维排序,二维树状数组,三维 分治 Or 树状数组套平衡树…… <法一>树状数组. #include<cstdio> #include<algorithm> #include<iostream> using namespace st…
P3431 [POI2005]AUT-The Bus Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个数(i, j) 表示(1 <= i <= n, 1 <= j <= m). Byte City里有一条公交线, 在某一些路口设置了公交站点. 公交车从 (1, 1) 发车, 在(n, m)结束.公交车只能往北或往东走. 现在有一些乘客在某些站点等车. 公交…
[BZOJ1109][POI2007]堆积木Klo Description Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置.一个上面写有数i的积木的正确位置是这个塔从下往上数第i个位置.Mary决定从现有的高塔中移走一些,使得有最多的积木在正确的位置.请你告诉Mary她应该移走哪些积木. Input 第一行为一个数n,表示高塔的初始高度.第二行包含n个数…
>传送门< 前言 这题比赛的时候觉得能做,硬是怼了一个半小时,最后还是放弃了.开始想到用二维前缀和,结果$n\leq 10^{6}$时间和空间上都爆了,没有办法.赛后看题解用树状数组,一看不就是二维树状数组么,结果时间是够了,然而$sum[maxn][maxn]$空间上就爆了.于是开始研究别人的代码,终于看懂了,就觉得很神奇,这个思想很妙,后来再看别的博客,原来是二维偏序(就是利用树状数组/$CDQ$分治求$M$个点中每个点横纵坐标均小于这个点的权值和) 题意 有一个$n\ast n(n\le…
题目链接 分析 : 最简单的想法当然就是去模拟 直接对每个施肥料的操作进行模拟.然后计算贡献 但是这显然会超时.这题需要换一个思维 对于一个土地(也就是二维平面上的一个点)的种类是 T' 如果它被操作了 K1 次.那么如果我能知道所有用 T' 施肥的操作 对这块土地施肥的次数 K2.那么当 K1 == K2 的时候.这片土地就不会 Die 而当 K1 != K2 的时候.则这块土地就会 Die .换句话说就是答案要加一 计算每个土地被操作的总次数 要知道每个土地被操作了多少次.可以利用二维前缀和…
题面 一个长为 N N N 的序列 S S S ,最多翻转序列中一个区间,最小化 ∑ i = 2 N ∣ S i − S i − 1 ∣ \sum_{i=2}^{N}|S_i-S_{i-1}| i=2∑N​∣Si​−Si−1​∣ 并输出这个值. 2 ≤ N ≤ 3 × 1 0 5 , 1 ≤ S i ≤ 1 0 9 2\leq N\leq 3\times10^5,1\leq S_i\leq10^9 2≤N≤3×105,1≤Si​≤109 题解 算是非常经典的一道题吧(ZYY金句) 我们发现翻转一…
题解是直接对一维升序排列,然后计算有树状数组中比二维小的点即可 但是对二维降序排列为什么不信呢?? /* */ #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; #define maxn 1010 #define ll long long int n,m,k; ll bit[maxn*maxn]; struct Edge…
由于y=x,我们可以将点对称过来,以便(x,y)(x<y) 考虑选取正方形(a,a,b,b),点集则为\((a\le x\le y\le b)\),相当于二维数点 将点按x降序,y升序排列,线段树先存"-坐标",以便统计\((a,b)\)时直接线段树查询最大值再加b即可…
前言:考的一般般吧……T3暴力没打上来挺可惜的,到手的75分没了. ---------------------------------- T1 [JZOJ4745]看电影 Description 听说NOIP2016大家都考得不错,于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影.可是省常中OI队的同学们共有 N(N >= K)人.于是机智的你想到了一个公平公正的方法决定哪K人去看电影.N个人排成一圈,按顺时针顺序标号为1 - N,每次随机一个还存活的人的编号,将这个人踢…
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <map> using namespace std; ; int n,m,k,c[Maxn],F[Maxn]; map<int,int> M; struct Info{int x,y,z;}P[Maxn]; inline bool cmp(Info A,Info…
---恢复内容开始--- Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13003    Accepted Submission(s): 6843 Problem Description A group of researchers are designing an experiment to te…
题目链接:https://cn.vjudge.net/problem/HYSBZ-2131 题目大意:中文题目 具体思路:对于任意的两个位置,posA和posB,我们可以如下推导. |posA-posB|<=2*(tA-tB) 2*tB-2*tA<=posA-posB<=2*tB-2*tA. 2*tA+posA>=2*tB+posB  || 2*tA -pos A > = 2*tB-posB.(注意这个地方,只要有一个满足就可以了) 然后我们对2*tA+posA进行排序,每一…
按区间r降序排列,r相同按照l升序排列,两个区间相同时特判一下即可 /* 给定n个闭区间[l,r],如果对区间[li,ri],[lj,rj]来说, 有区间j严格包含(两个边界不能同时重合)在区间i内,那么区间i大于区间j 问区间有多少个区间大于区间i 读入所有的区间,按r降序,l升序 然后按顺序访问每个区间, */ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm>…
A #include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; int main() { int n; cin >> n; string a; cin >> a; ; ; ; i < a.size(); i++) { ') { one++; } else { zero++; } } ) { one--; } ; i <= one; i++) { cout <…
cdq(陈丹琦)分治,是一种类似二分的算法.基本思想同分治: 递归,把大问题划分成若干个结构相同的子问题,直到(L==R): 处理左区间[L,mid]对右区间[mid+1,R]的影响: 合并. 它可以顶替复杂的高级数据结构,但必须离线操作. N维偏序,就是求N个关键字下的顺/逆序对.cdq分治是这类题中常用的降维手段. 一维偏序 学习归并排序时,我们了解到它的一个特性就是可以用来求逆序对. Luogu P1908 逆序对 void merge(int L,int R) { if(L == R)r…
更新了三维偏序问题的拓展 cdq分治 \(cdq\)分治是一种由\(IOI\ Au\)选手\(cdq\)提出的离线分治算法,又称基于时间的分治算法. 二维偏序问题 这是\(cdq\)分治最早提出的时候解决的问题,大意为:给定\(n\)对二元组\((a_{i},b_{i})\),求\(cnt_i=\sum_{j=i+1}^n[a_j>a_i\ and \ b_j>b_i]\). 这个和逆序对有点像,先将二元组按\(a\)为第一关键字排序,那么\(a\)就一定有序了,即求下标和数值(\(b\))都…
query Given a permutation pp of length nn, you are asked to answer mm queries, each query can be represented as a pair (l ,r )(l,r), you need to find the number of pair(i ,j)(i,j) such that l \le i < j \le rl≤i<j≤r and \min(p_i,p_j) = \gcd(p_i,p_j )…
题目链接:BZOJ 洛谷 \(O(n^2)\)DP很好写,对于当前的i从之前满足条件的j中选一个最大值,\(dp[i]=d[j]+1\) for(int j=1; j<i; ++j) if(a[j]<=minv[i]&&maxv[j]<=a[i])//序列只会变换一次 dp[i]=max{dp[j]+1}; 转移要满足两个条件:\(a[j]<=minv[i]\ \&\&\ maxv[j]<=a[i]\) 一个二维偏序问题,CDQ.树套树都可以.…
A.Laptop 链接:https://ac.nowcoder.com/acm/contest/16/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 FST是一名可怜的小朋友,他很强,但是经常fst,所以rating一直低迷. 但是重点在于,他非常适合ACM!并在最近的区域赛中获得了不错的成绩. 拿到奖金后FST决定买一台新笔记本,但是FST发现,在价格能承受的范围内,笔…
Another Longest Increasing Subsequence Problem 有两种思路. 思路一: 考虑到如果只有一维,那么可以用f[s]表示长度为s时,最后一个数是多少,把这个想法拓展到二维,即f[s]表示长度为s时,最后一个点的集合,也就是说有多个点,但是这多个点是有顺序,x递增,y递减,并且每次加点进来的时候,随时保持这个顺序. 关于怎么处理点的集合,可以用平衡树来实现,这里用map来代替,而且map自带二分查找的功能. 算法实现:采用二分答案的方法,初始区间是(0,an…
题目链接:[http://acm.split.hdu.edu.cn/showproblem.php?pid=5517] 题意:定义multi_set A<a , d>,B<c , d , e>,C<x , y , z>,给出 A , B ,定义 C = A * B = ={⟨a,c,d⟩∣⟨a,b⟩∈A, ⟨c,d,e⟩∈B and b=e} .求出C之后,求C中一个元素t[i]<a , b , c>是否存在一个元素tmp<x , y , z>使…
题意 题目链接 Sol 二维数点板子题 首先把询问拆成四个矩形 然后离散化+树状数组统计就可以了 // luogu-judger-enable-o2 #include<bits/stdc++.h> #define LL long long using namespace std; const int MAXN = 4e6 + 10; inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c &…
离线好评 Description 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个园丁道: “最近我在思索一个问题,如果我们把花坛摆成六个六角形,那么……” “那么本质上它是一个深度优先搜索,陛下”,园丁深深地向国王鞠了一躬. “嗯……我听说有一种怪物叫九头蛇,它非常贪吃苹果树……” “是的,显然这是一道经典的动态规划题,早在N元4002年我们就已经发现了其中的奥秘了,陛下”.…