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一直在等待。所以就超限了

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?