​​​​​​传送门

小鱼比可爱

模拟、树状数组、线段树典型例题,把小鱼可爱值一个个加入再查询比它小的值有多少就行了

首先是暴力AC代码

这个只要暴力模拟查找就行了,时间复杂度大概O(n^2),很慢,但是可以过n<=100

#include<bits/stdc++.h>
using namespace std;
int main()
{int n,fish[110];cin>>n;for(int i=1;i<=n;i++){cin>>fish[i];int tmp=0;for(int j=1;j<i;j++)if(fish[i]>fish[j])tmp++;cout<<tmp<<" ";}return 0;
}

然后是树状数组AC代码

O(nlogn),又快又好写,跟逆序对有点像,空间复杂度比线段树好一点

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,maxn=-1,num[510],tree[510];
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
void write(int x)
{if(x>=10)write(x/10);putchar(x%10+'0');
}
int lowbit(int x)
{return x&-x;
}
void add(int x)
{for(;x<=maxn;x+=lowbit(x))tree[x]++;
}
int ask(int x)
{int ans=0;for(;x>=1;x-=lowbit(x))ans+=tree[x];return ans;
}
void init()
{n=read();for(int i=1;i<=n;i++){num[i]=read()+1;maxn=max(maxn,num[i]);}memset(tree,0,sizeof(tree));
}
main()
{init();for(int i=1;i<=n;i++){int ans=ask(num[i]-1);if(ans==0){putchar('0');putchar(' ');}else{write(ans);putchar(' ');}add(num[i]);}return 0;
}

比暴力快了整整2ms

最后是线段树AC代码

也是O(nlogn),代码好写,老样子,会写逆序对就能写这东西

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
struct Wryyyyyy{int l,r,sum;
}tree[4010];
int n,num[1010],maxn=0;
void build(int n,int l,int r)
{tree[n].l=l;tree[n].r=r;if(l==r)return;int mid=(l+r)>>1;build(n*2,l,mid);build(n*2+1,mid+1,r);
}
void update(int n,int add_num)
{if(tree[n].l==tree[n].r){tree[n].sum++;return;}int mid=(tree[n].l+tree[n].r)>>1;if(add_num<=mid)update(n*2,add_num);if(add_num>mid)update(n*2+1,add_num);tree[n].sum=tree[n*2].sum+tree[n*2+1].sum;
}
int find_ans(int n,int find_num)
{if(tree[n].l>find_num&&tree[n].r<=maxn)return tree[n].sum;if(tree[n].r<=find_num||tree[n].l>maxn)return 0;return find_ans(n*2,find_num)+find_ans(n*2+1,find_num);
}
void init()
{n=read();for(int i=1;i<=n;i++){num[i]=read()+1;maxn=max(maxn,num[i]);}maxn++;for(int i=1;i<=n;i++)num[i]=maxn-num[i];build(1,1,maxn);int ans;for(int i=1;i<=n;i++){ans=find_ans(1,num[i]);update(1,num[i]);printf("%lld ",ans);}
}
main()
{init();return 0;
}

比暴力快了整整1ms(主要是因为没写快写)

【洛谷】P1428:小鱼比可爱相关推荐

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

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

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

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

  3. 数组——洛谷#P1428 小鱼比可爱(Python实现)

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

  4. 洛谷 P1428 小鱼比可爱 C语言

    AC代码: #include<stdio.h>int main(){int a[105], b[105], n; //a数组存输入数据, b数组存放与a对应的小鱼前有几个数值相对小的sca ...

  5. P1428小鱼比可爱——C++实现

    洛谷P1428小鱼比可爱 最近遇到一道题,感觉有点意思,题目描述如下: 题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个"比可爱"比赛,比的是每只鱼的可爱程度.参赛的鱼 ...

  6. P1428 小鱼比可爱(python3实现)

    """P1428 小鱼比可爱 https://www.luogu.com.cn/problem/P1428""" n=int(input() ...

  7. 洛谷P1425小鱼的游泳时间【c语言】

    洛谷P1425 小鱼的游泳时间[c语言] 题目描述 伦敦奥运会要到了,小鱼在拼命练习游泳准备参加游泳比赛,可怜的小鱼并不知道鱼类是不能参加人类的奥运会的. 这一天,小鱼给自己的游泳时间做了精确的计时( ...

  8. P1428 小鱼比可爱(C语言)

    P1428 小鱼比可爱 1.思路 看到这题就想着用排序.于是小鱼中的的第一个数,没有比较的对象,则直接输出0, 然后用双重for循环,将小鱼的可爱进行比较,计数. 2.源码 #include<s ...

  9. 小鱼比可爱(洛谷-P1428)

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

  10. 洛谷-P1428-小鱼比可爱

    小鱼比可爱 - 洛谷 解题思路: 1.第一条小鱼的左边是没有鱼的,所以没有不如他的,先输出0 2.从第二条鱼开始遍历,每一项都和他前面的比,如果当前的鱼的值比前面的大,那么计数器增加,循环结束,输出s ...

最新文章

  1. 卷积神经网络(CNN)的原理
  2. 中国广电设备行业十四五运营模式与投资机遇研究报告2022版
  3. Java线程之两种方法Runnable和Thread的区别
  4. Java线程面试题,值得一看!
  5. 基于java银行ATM管理系统设计(含源文件)
  6. 现在输入 n 个数字, 以逗号, 分开; 然后可选择升或者 降序排序;
  7. 远程办公软件华为云WeLink高效视频会议指南(下篇:视频会议怎么记录会议纪要?)
  8. my sql实验视图_数据库SQL 视图的创建及使用实验报告(共5篇)
  9. EtherCAT运动控制卡开发教程之Qt(下):SCARA机械手正反解的建立
  10. 小小一方士 C# Async\Await 之 上传/下载文件进度条实现原理
  11. 学习在html网页中打开展示pdf文件
  12. python爬取今日头条专栏_[python3]今日头条图片爬取
  13. win10无法安装完成若要在此计算机上,win10提示windows安装无法继续怎么办
  14. Python微信操控itchat定时发送消息
  15. C++笔记 蒙特卡罗计算π值
  16. CE简单修改演示(植物大战僵尸)
  17. 单点登录-基于JWT机制的单点登录
  18. 如何安装ubuntu kylin(优麒麟)?
  19. LeetCode第258场周赛
  20. .NET/C# — EXCEL文件内容添加到数据库中

热门文章

  1. 2020考研计算机(408)考试大纲
  2. 【微信小程序】使用 Cryptojs 解密微信绑定手机号码
  3. crucible-4.8.2更改mysql5.7数据库报错User ‘crucible‘ has exceeded the ‘max_questions‘ resource
  4. linux中用来保存组账户的文件,Linux账户管理的几个文件
  5. 八皇后问题 回溯法
  6. 给C语言程序设置密码
  7. SSL 3.0 Poodle漏洞修复方法
  8. iOS应用性能调优--初级---王朋
  9. Firefox ios 火狐浏览器iOS版本二次开发(一)
  10. 计算机应用助理师证,计算机应用助理工程师考的简单吗?吗?