weixin_44409840 2019-06-25 23:21 采纳率: 0%
浏览 391

求问大佬们用什么方法可以降低遍历数组复杂度(附题目与代码)

题目描述

未来某一天,Miaowu回首曾经,发现自己已度过的n年里,每一年都在为黑暗世界做贡献,第i年为黑暗世界的贡献值是a[i].理论上来说,一只猫所坐的贡献应该是i>j则a[i]>a[j],但Miaowu却惊奇的发现,自己那曾经的岁月里,竟然有ia[j],的出现,这一下就勾起了他的兴趣,他想知道,这n年里,有多少个相应的两年自己所做的贡献是正常的,也就是说有多少对i,j满足i<j且a[i]<a[j].这应该是个很简单的问题,直接数就行了,但不幸的是,Miaowu已经老了(n很大很大),没有年轻时的激情了,所以想请你帮忙,Miaowu会告诉你他这n年每年的所做的贡献值,并且这些年的所做的贡献均是[1,n]之间的数,而且没有重复,然后你需要做的就是告诉他有多少对符合条件的年份.

输入

输入多组数据,每组数据包含两行,第一行一个整数n,表示他已活了n年,第二行有n个整数,第i个数a[i]表示他第i年所做的贡献值,

数据范围: 1 <= n <= 200000, 1<= a[i] <=n

这里我用的是线性查找数组的方法,提交网站时显示时间超限,想问一下大佬们怎么降低遍历数组复杂度,
#include
#include
#include
#define M 200000
int main()
{

int a[M]={0};
int n=0,i,j;
while(scanf("%d",&n)!=EOF)
{
int long t=0;
double x;
for(i=0;i {
scanf("%d",&a[i]);
}
for(i=n;i>0;i--)
{
for(j=i;j>0;j--)
{
if(a[i]>a[j-1]) t++;
}
}
x=pow(10,7);
printf("%lf",x);
x=x+9;
fmod(t,x);
printf("%d",t);
printf("\n");
memset(a,0,sizeof(a));
}
return 0;
}

  • 写回答

2条回答 默认 最新

  • iayhvf 2019-09-29 09:36
    关注

    应该是输入的问题。不定组数据输入,最后scanf一直在等待。所以就超限了

    评论

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码