求求求求求求求求求求求求求求求求助

P1168 中位数

Little_Brown_Rabbit @ 2024-10-04 15:55:54

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    long long a[n];
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<n;i+=2)
    {
        int b[i+1]; 
        for(int l=0;l<=i;l++)
        {
            b[l]=a[l];
        }
        sort(b,b+i+1);
        cout<<b[i/2]<<endl;
    }

}

40分。后几点tle,求优化


by ph22geyi @ 2024-10-04 15:56:56

有没有题目? (虽然我也很菜QAQ)


by ph22geyi @ 2024-10-04 15:57:38

@ph22geyi 等下我傻了,题目在旁边


by Little_Brown_Rabbit @ 2024-10-04 15:58:20

@ph22geyi p1168线段树


by ycyxh1 @ 2024-10-04 15:58:38

@xly_123 你的代码复杂度以及算法都不对,直接看tj吧


by ph22geyi @ 2024-10-04 16:00:24

@xly_123 能不能在输入的时候建一个数组储存和?

int a[100];
int s[100] = {0};
for(int i = 0;i < n; i++){
    cin >> a[i];
   s[i] = a[i]+s[i-1];
  }

by ph22geyi @ 2024-10-04 16:01:02

@ph22geyi 或者是一边输入一边输出答案...(弱)


by Chang__An__Li @ 2024-10-04 16:20:20

建两个数组,一个存大的数,一个存小的数。

遍历数组。

每遍历到一个数,将其与大数数组的第一个数进行比较,大了往大数组里放,小了往小数组里放。保持大小两数组大小相差小于等于1。答案就等于大数组的第一个数。

这样就可以用O(n)的复杂度解决。


|