树上神奇 逆 逆序对(我的叫法)hh的小纸条 重中之重!!!!!
HH:
输入
接下来n-1行:表示第二个数到第n个数前面有多少个数比它小。
(因为第一个数前面没有任何数,所以不需要输入)
输出
样例输入 Copy
5
1
2
1
0
样例输出 Copy
2
4
5
3
1
经过长时间的思考(瞎碰),我发现了一件事:
题目翻译成这样:给定每个点的逆序对的数量,求每个点。
我和廖半仙一开始进行了愉快的跳表操作。
事实证明它是完全错的。
总的来说,这题目被坑了的唯一原因就是: MAXN呐!MAXN呐!
+1=100
-1=60
maxn。。。
ANSWER:
我发现:最后一个值是可以确定的。
因为我们知道最后一个值前面有几个点比它小,于是这个点就是第n+1大的点。
把这个点塞到答案数组里面。
找前一个大小,我们发现:删去第一个点,再进行以上操作,就可以得到这个点的大小。
于是:算法确认:
1、找当前数字对应的第a[n]+1大
2、塞答案
3、删去这个数。
重点来了。
我们删去这个数,怎么实现呢?
如果只要数组硬爆就能解决的事,那还是wzy大佬出的蓝题吗?
不可能!
我需要一个数据结构,来维护这个东西。
想想看数据结构们,有什么可以删点呢?删点之后还要把后面的补上来....
我问到了邻接表删点,甚至想到了主席树删点(区间第k小,动态点删掉然后查询即可)
但是....都不行
平衡树吧,有删点操作。
但是我不会。
感谢shy大佬的shy树。
MAXN呐!MAXN呐!
+1=100
-1=60
maxn。。。
上代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6;
int n,a[maxn],ans[maxn];
struct tree
{
int ls,rs,size,pre;
}t[maxn*];
int tot=;
int build(int l,int r)
{
if(l==r)
{
t[++tot].size=;//子树大小,叶节点的子树大小=1
t[tot].pre=l;//节点的值=l,12345.....
return tot;//返回当前叶节点的编号
}
int mid=(l+r)>>;
int x=++tot;//树节点的编号
t[x].ls=build(l,mid);//同主席树建树模式,ls rs=下面的返回值
t[x].rs=build(mid+,r);
t[x].size=r-l+;//差分处理子树大小
return x;
}
int ask(int x,int l,int r,int k)
{
if(l==r)
{
t[x].size--;//叶节点,删除它
return t[x].pre;//返回叶节点的值
}
t[x].size--;//走一条边,删一个点
int mid=l+r>>;
int mik=mid+;
int q=k-t[t[x].ls].size;
if(k<=t[t[x].ls].size)return ask(t[x].ls,l,mid,k);//二叉搜索树部分,有点类似主席树,通过差分不停在节点上滑来滑去,直到找到相应的叶节点
else return ask(t[x].rs,mik,r,q);
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);//n-1个
}
a[]=;//第一个数前面没有比它小的
build(,n);//建树
for(int i=n;i>;i--)
{
ans[i]=ask(,,n,a[i]+);
}
for(int i=;i<=n;i++) printf("%d\n",ans[i]);
return ;
}
思路就是二叉查找树,建树之后,根据a数组,大了往左找,小了往右找,然后找到这个值为止,删点。
膜拜shy树
%%%shy大佬,tql
(完)
树上神奇 逆 逆序对(我的叫法)hh的小纸条 重中之重!!!!!的更多相关文章
- LOJ #2831. 「JOISC 2018 Day 1」道路建设 线段树+Link-cut-tree
用 LCT 维护颜色相同连通块,然后在线段树上查一下逆序对个数就可以了. code: #include <cstdio> #include <algorithm> #inclu ...
- POI题解整合
我也不知道为啥我就想把POI的题全都放到一篇blog里写完. POI 2005 SAM-Toy Cars 贪心,每次选下次出现最晚的. POI 2006 KRA-The Disks 箱子位置单调,所以 ...
- P1412 经营与开发
题目描述 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词. eXplore(探索) eXpand(拓张与发展) eXploit(经营与开发) ...
- 2014年年度工作总结--IT狂人实录
2014年也是我人生最重要的一年,她见证了我的成长与蜕变,让我从一个迷茫的旅者踏上一条柳暗花明的路. 春宇之行 从春宇短暂的9个月,却经历常人难以想想的风风雨雨,首先要感谢春宇公司给我带来了安逸宽松的 ...
- windows中的软链接硬链接等
学校嘛,有些时候还是得逆逆上网客户端啥的,并且学校的不少工作,这Windows的需求还是挺强的,之前Win10的体验并不是太好,不过时隔这么久,打算从7升级到10了,恰好系统也该换了. 首先是命令行的 ...
- php_1
简介:(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发,语言的风格有 ...
- NOI导刊集训感言
圆溜溜,尤其首先,集训的收获很大,远远比自学要来的快 其次,新知识点到时没怎么讲(A*,数论除外,倒是真的学会不少以前碰都不敢碰的定理呀,结论之类的东西),但是还是深深地感受到了集训的困难,七天的节奏 ...
- 「BJWC2010」模板严格次小生成树
题目描述 小 \(C\) 最近学了很多最小生成树的算法,\(Prim\) 算法.\(Kruskal\) 算法.消圈算法等等.正当小\(C\)洋洋得意之时,小\(P\)又来泼小\(C\)冷水了.小\(P ...
- 【牛客挑战赛32E】树上逆序对
题目 数据范围非常奇怪,询问的逆序对个数\(k\leq 30000\),我们应该可以把所有的情况都求出来 发现对于树上两点\(x,y\),如果\(x\)是\(y\)的祖先,那么绝对值较大的点的符号决定 ...
随机推荐
- 【WPF】EntityframeworkCore NLog出力设置
最近在用EFcore,由于不熟悉,经常出现一些异常都不知道如何排查,只能把EFcore的执行记录打印出来调查.确实简化了很多问题的调查. 官网提供了Asp.net Core与.net core 应用的 ...
- ssm配置文件
mybatis配置文件SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8"?> <!DO ...
- CocosCreator 快速开发推箱子游戏,附代码
游戏总共分为4个功能模块: - 开始游戏(menuLayer) - 关卡选择(levelLayer) - 游戏(gameLayer) - 游戏结算(gameOverLayer) Creator内组件效 ...
- Qt+VC2010+glew环境安装配置
Qt的源码及预编译安装包在 Qt Archive下载,http://download.qt.io/archive/qt/, 目前最新的是Qt5,其中和Qt4不同的是,Qt5多了个QOpenGLWidg ...
- 解决Maven依赖jar包冲突总结
maven导入jar包中的一些概念: 直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包. 传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中 ...
- EasyExcel 轻松灵活读取Excel内容
写在前面 Java 后端程序员应该会遇到读取 Excel 信息到 DB 等相关需求,脑海中可能突然间想起 Apache POI 这个技术解决方案,但是当 Excel 的数据量非常大的时候,你也许发现, ...
- Windows快捷方式绑马
0x01前言 windows的shell32在处理控制面板程序的快捷方式文件时,存在一个漏洞,可以加载硬盘上的任意DLL文件,即可执行任意代码. 之前看到一款俄罗斯黑阔写的的快捷方式下载木马并运行的生 ...
- wwindows权限认识(用户及用户组)
windows权限认识(用户及用户组) Windows系统内置了许多本地用户组,这些用户组本身都已经被赋予一些权限(permissions),它们具有管理本地计算机或访问本地资源的权限.只要用户账户加 ...
- 《FFT家族—从不会到崩溃(坑)》读blog笔记
免责声明 原文地址https://blog.csdn.net/linjiayang2016/article/details/80341958,作者linjiayang2016.\text{linjia ...
- [USACO14JAN]滑雪等级Ski Course Rating
题目描述 The cross-country skiing course at the winter Moolympics is described by an M x N grid of eleva ...