一个问题

P2367 语文成绩

cjihyy @ 2022-07-15 15:07:01

为什么这道题sort反而不如擂台快?

#include <bits/stdc++.h>
using namespace std;
const int maxn=5000005;
int a[maxn],d[maxn];
int main(){
    int n,p;
    cin>>n>>p;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        d[i]=a[i]-a[i-1];
    }
    for(int i=1;i<=p;i++){
         int x,y,z;
         cin>>x>>y>>z;
         d[x]+=z;
         d[y+1]-=z;
    }
    for(int i=1;i<=n;i++){
        a[i]=d[i]+a[i-1];
    }
    sort(a+1,a+1+n);
   cout<<a[1];
    return 0;
}

如上,这份代码会TLE最后一个点 而下面这份代码则不会

#include <bits/stdc++.h>
using namespace std;
const int maxn=5000005;
int a[maxn],d[maxn];
int main(){
    int n,p;
    cin>>n>>p;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        d[i]=a[i]-a[i-1];
    }
    for(int i=1;i<=p;i++){
         int x,y,z;
         cin>>x>>y>>z;
         d[x]+=z;
         d[y+1]-=z;
    }
    for(int i=1;i<=n;i++){
        a[i]=d[i]+a[i-1];
    }
    int min=1e9;
    for(int i=1;i<=n;i++)
        if(min>a[i])min=a[i];
    cout<<min;
    return 0;
}

就很奇怪(害我检查半天


by OutsideR_ @ 2022-07-15 15:08:20

@cjihyy

请问sort的复杂度可以达到O(n)吗


by OutsideR_ @ 2022-07-15 15:08:48

@cjihyy 求最小值你不用擂台方法还排序一遍吗


by cjihyy @ 2022-07-15 15:09:56


by _Ad_Astra_ @ 2022-07-15 15:10:16

sort的复杂度本来就是 O(n \log n) 的。


by cjihyy @ 2022-07-15 15:10:16

彳亍


by cjihyy @ 2022-07-15 15:10:38

本贴完结(主要是楼主过水


by Esawkm @ 2022-07-15 15:10:46

擂台O(n),sort最快O(nlogn)


by 3blue1blue @ 2022-07-15 15:12:23

sort最快O(n)还带常数


by GoldenFishX @ 2022-07-15 15:16:41

求最小值排序干嘛 。。。


by Binah_cyc @ 2022-10-03 15:35:01

第一个加速可以过

快读,printf+O2就能过了


|