树上神奇 逆 逆序对(我的叫法)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\)的祖先,那么绝对值较大的点的符号决定 ...
随机推荐
- ef core实现软删除
很多web程序一般的偶不会设计真的物理删除了. 基本上都是在在数据库加一个标记,就得当作已经删除了.同时在查询的时候,过滤已经标记删除的数据 ef core实现软删除是非常简单的,直接在OnModel ...
- e课表项目第二次冲刺周期第一天
昨天干了什么? 昨天与我们小组的成员商量了一个重大的决定,由于我们第一次冲刺周期的成果,就是我们决定我们要转型发展. 今天干了什么? 查阅相关的资料,我们正式决定要做一款学习的课程表APP,把简易作为 ...
- BZOJ 4392 卡牌游戏
Description 奶牛贝茜是卡牌游戏的狂热爱好者, 但是令人吃惊的, 她缺乏对手. 不幸的是, 任何牧 群里的其他牛都不是好对手. 他们实在是太差了 , 实际上, 他们玩卡牌游戏时会遵循一种完全 ...
- tp5中使用中间控制器代理路由,以避免创建过多的无用控制器方法
在写项目的时候偶尔会加载一些不需要传递参数的静态视图,例如 class Index extends Common { public function index() { return $this-&g ...
- Java并发编程总结(一)Syncronized解析
Syncronized解析 作用: )确保线程互斥的访问同步代码 )保证共享变量的修改能够及时可见 )有效解决重排序问题. 用法: )修饰普通方法(锁是当前实例对象) )修饰静态方法(锁是当前对象的C ...
- Flask中多APP应用以及admin后台系统
一.多APP from werkzeug.wsgi import DispatcherMiddleware from werkzeug.serving import run_simple from f ...
- Javascript之傻傻理不清的原型链、prototype、__proto__
新人学习Javascript,其中的原型链一直是云里雾里,不得要领,查了很多相关资料,觉得这遍讲得最为清晰易懂,特转载分享,共同学习. 1. JavaScript内置对象 所谓的内置对象 指的是:Ja ...
- [BZOJ1415][NOI2005]聪聪与可可
Description Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点 ...
- 如果有人问你 MySql 怎么存取 Emoji,把这篇文章扔给他
01.前言 Emoji 在我们生活中真的是越来越常见了,几乎每次发消息的时候不带个 Emoji,总觉得少了点什么,似乎干巴巴的文字已经无法承载我们丰富的感情了.对于我们开发者来说,如何将 Emoji ...
- 生成对抗网络(Generative Adversarial Networks,GAN)初探
1. 从纳什均衡(Nash equilibrium)说起 我们先来看看纳什均衡的经济学定义: 所谓纳什均衡,指的是参与人的这样一种策略组合,在该策略组合上,任何参与人单独改变策略都不会得到好处.换句话 ...