P1428

题目描述

  人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这些可爱但是鱼脑不够用的小鱼们计算一下。

输入输出格式

输入格式:

  第一行输入一个整数n,表示鱼的数目。

  第二行内输入n个整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度。

输出格式:

  行内输出n个整数,用空格间隔,依次表示每只小鱼眼中有多少只鱼不如自己可爱。

输入样例

6
4 3 0 5 1 2

输出样例

0 0 0 3 1 2

一般解法:

#include <bits/stdc++.h>
using namespace std;
int a[],b[],n;
int main(){
cin>>n;
for (int i=;i<=n;i++)//读入每条鱼的可爱值
cin>>a[i];
for (int i=;i<=n;i++)//枚举N条鱼
for (int j=i;j>=;j--){//从第I个位置倒着往前找
if (a[j]<a[i])
b[i]++;//如果找到比第I条鱼丑的,统计数组b对应的b[i]+1
}
for (int i=;i<=n;i++)
cout<<b[i]<<" ";//输出
return ;
}

树状数组逆序对

  1、构造结构体,然后根据可爱值的大小来排序,其实也是离散化,但是这里不需要专门用数组记录。

  2、因为已经根据可爱值的大小进行排序,所以就按值的大小进行标记,即将树状数组c加1。

  3、那么求逆序对就是求index-1前已经标记过的c的个数。

  4、对于这道题,将第i条鱼前面鱼的个数减去他前面逆序对的个数就是没有他可爱的鱼的个数。

代码如下:

#include <bits/stdc++.h>
using namespace std;
int n;
struct node{
int val,index;
}a[];
bool cmp(node a,node b){
return a.val>b.val;
}
bool cmp1(node a,node b){
return a.index<b.index;
}
int c[],ans[];
int lowbit(int x){
return x&(-x);
}
void update(int x,int val){
for(int i=x;i<=n;i+=lowbit(i))
c[i]+=;
}
int getsum(int x){
int tp=;
for(int i=x;i>;i-=lowbit(i))
tp+=c[i];
return tp;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i)
scanf("%d",&a[i].val),a[i].index=i;
sort(a+,a++n,cmp);
for(int i=;i<=n;++i){
update(a[i].index,);
ans[a[i].index]=getsum(a[i].index-);
}
sort(a+,a++n,cmp1);
for(int i=;i<=n;++i)
printf("%d ",i-ans[i]-);
return ;
}

动态开点的权值线段树:

代码如下:

#include<bits/stdc++.h>
#define maxn 107
#define maxnode 5007
#define maxval 2147483646
using namespace std; int n,a[maxn];
int tree[maxnode][],rt=,nodenum=; void PushUp(int rt){
tree[rt][]=tree[ tree[rt][] ][]+tree[ tree[rt][] ][];
} int query(int L,int R,int l,int r,int &rt){
if (rt==) return ; //[1] 若该点不存在,返回0(说明该点没有值)
if (L<=l && r<=R) return tree[rt][];
int m=(l+r)>>; int ANS=;
if (L<=m) ANS+=query(L,R,l,m,tree[rt][]);
if (R>m) ANS+=query(L,R,m+,r,tree[rt][]);
return ANS;
} void update(int L,int C,int l,int r,int &rt){
if (rt==){ //[2] 若该点不存在,新建改点
nodenum++;
rt=nodenum;
tree[nodenum][]=tree[nodenum][]=tree[nodenum][]=;
}
if (l==r){
tree[rt][]+=C;
return;
}
int m=(l+r)>>;
if (L<=m) update(L,C,l,m,tree[rt][]);
else update(L,C,m+,r,tree[rt][]);
PushUp(rt);
} int main(){
int n;
scanf("%d", &n);
for (int i=; i<=n; i++){
int val;
scanf("%d", &val);
printf("%d ",query(,val-,,maxval,rt));
update(val,+,,maxval,rt);
}
}

P1428 小鱼比可爱的更多相关文章

  1. luogu P1428 小鱼比可爱 x

    P1428 小鱼比可爱 题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示 ...

  2. 洛谷 P1428 小鱼比可爱

    题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然 ...

  3. 洛谷P1428 小鱼比可爱

    题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个"比可爱"比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只 ...

  4. 洛谷——P1428 小鱼比可爱

    https://www.luogu.org/problem/show?pid=1428 题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度.参赛的鱼被从 ...

  5. Java实现洛谷 P1428 小鱼比可爱

    题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个"比可爱"比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只 ...

  6. 洛谷P5463 小鱼比可爱(加强版) 题解

    写博客不易,来玩会? 这道题我和dalao们的做法略有不同,我用的是归并排序做法qwq 归并排序求逆序对大家应该很清楚了,我这里就来讲讲如何用归并排序求出这道题的答案 让我们先观察一下规律 举个栗子, ...

  7. 七月月赛T3

    题目背景 本题时空限制已经扩大 题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数 ...

  8. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  9. 用3D再现2D偶像的可爱,Cygames【偶像大师 灰姑娘女孩】开发示例

          作为万代南梦宫娱乐的偶像养成游戏[偶像大师]的派生作品,是由Mobage创作的[偶像大师 灰姑娘女孩].这个游戏的最新作品,是现在累计下载突破1200万的大作,Android/iOS平台的 ...

随机推荐

  1. centos中docker的安装

    之前学习docker的时候,是在windows上直接使用可执行文件安装的,最近需要在自己的服务器上安装docker,特此了解了一下如何安装,这里补一下. 小白学Docker之基础篇 小白学Docker ...

  2. 北京教育软件创业公司招 .net工程师

    北京教育软件创业公司,招 .net工程师,月工资2万左右,有合适的朋友帮忙推荐下,要求水平稍高一些的.产品目前用Winform开发的.创始人两个清华,一个北大.老板在美国待了七年回来的,爱人在清华教书 ...

  3. 正确理解Handle对象

    上古时期的程序员, 肯定都知道Handle对象, 一般中文翻译成句柄. 一般的Handle在实现上, 都是一个整数, 而这个整数可以理解为一个指针, 指针指向的地址呢, 又保存了另外一个指针. 之所以 ...

  4. 页面添加iconfont字体-[超详细]-支持彩色

    第一步: 去矢量图官网注册一下,获取小图标(字体) 的来源 (也可以是其他类似的网站)这里以 阿里妈妈矢量图 官网为例,因为图标丰富,方便使用. 注册请点:https://www.iconfont.c ...

  5. PySpider框架的基本用法

    pyspider安装: 3.7之后无法正常使用,使用可以下载Python3.6或以下,或者修改pyspider内部代码 ———————————————————————————————————————— ...

  6. HNOI2013 BZOJ3144 切糕

    在n×m的表格上,在(x,y)填v的代价是w(x,y,v),且相邻格子填的数相差≤d.求填满表格的最小代价.n,m,maxv≤40. 每个点上选择一个数填,因此将上面的数串起来.考虑限制条件,矛盾条件 ...

  7. 逻辑回归为什么用sigmoid函数

    Logistic回归目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷. 因此,使用logistic函数(或称作sigmoid函数)将自 ...

  8. 记第一次多用户在Git提交代码

    今天第一次进行了多用户(其实就两人)在自建Git服务器提交代码. 先记录碰到的问题:首先是本地提交代码时,进行了add,commit后,在push时碰到服务器故障,待设置好服务器后,再push时,却p ...

  9. MySQLl导入导出SQL文件

    window 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u dbuser -p dbname > dbname.sql ...

  10. vue-lazyload简单使用

    vue-lazyload简单使用 npm地址:https://www.npmjs.com/package/vue-lazyload github地址:https://github.com/hilong ...