为什么会这样(P1496中的一个疑问
  • 板块学术版
  • 楼主leiwusi
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/1/7 19:23
  • 上次更新2024/1/7 22:19:45
查看原帖
为什么会这样(P1496中的一个疑问
525038
leiwusi楼主2024/1/7 19:23

rt,1<=n<=2*10^4


RE代码:

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;

const int MAXN = 2e4+114;

int n;
struct lin{
    int a,b;
} ls[MAXN];

int t[MAXN*2];
int ct = 1;

int l[MAXN*4];
int ans = 0;
int cnt;
void lisan(){
    sort(t+1,t+ct);
    cnt = unique(t+1,t+ct)-t-1;
    for(int i = 1;i<=n*2;i++){
        ls[i].a = lower_bound(t+1,t+cnt+1,ls[i].a) -t;
        ls[i].b = lower_bound(t+1,t+cnt+1,ls[i].b)-t;
    }
}

signed main(){
    cin>>n;
    for(int i = 1;i<=n;i++){
        cin>>ls[i].a>>ls[i].b;
        t[ct++] = ls[i].a;
        t[ct++] = ls[i].b;
    }
    lisan();
    for(int i = 1;i<=n;i++){
        l[ls[i].a]++;
        l[ls[i].b]--;
    }
    // for(int i = 1;i<=20;i++){
    //     cout<<l[i]<<" ";    
    // }
    // cout<<endl;
    for(int i = 1;i<=cnt;i++){
        l[i] += l[i-1];
        if(l[i]!=0) ans += t[i+1]-t[i];    
    }
    cout<<ans<<endl;
    // for(int i = 1;i<=20;i++){
    //     cout<<l[i]<<" ";    
    // }
    

    //t[ls[i].a] t[ls[i].b]
    return 0;
}

AC代码:

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;

const int MAXN = 2e4+114;

int n;
struct lin{
    int a,b;
} ls[MAXN*2];

int t[MAXN*2];
int ct = 1;

int l[MAXN*4];
int ans = 0;
int cnt;
void lisan(){
    sort(t+1,t+ct);
    cnt = unique(t+1,t+ct)-t-1;
    for(int i = 1;i<=n*2;i++){
        ls[i].a = lower_bound(t+1,t+cnt+1,ls[i].a) -t;
        ls[i].b = lower_bound(t+1,t+cnt+1,ls[i].b)-t;
    }
}

signed main(){
    cin>>n;
    for(int i = 1;i<=n;i++){
        cin>>ls[i].a>>ls[i].b;
        t[ct++] = ls[i].a;
        t[ct++] = ls[i].b;
    }
    lisan();
    for(int i = 1;i<=n;i++){
        l[ls[i].a]++;
        l[ls[i].b]--;
    }
    // for(int i = 1;i<=20;i++){
    //     cout<<l[i]<<" ";    
    // }
    // cout<<endl;
    for(int i = 1;i<=cnt;i++){
        l[i] += l[i-1];
        if(l[i]!=0) ans += t[i+1]-t[i];    
    }
    cout<<ans<<endl;
    // for(int i = 1;i<=20;i++){
    //     cout<<l[i]<<" ";    
    // }
    

    //t[ls[i].a] t[ls[i].b]
    return 0;
}


其中ls的大小开大了一倍就不RE了

2024/1/7 19:23
加载中...