求助!离散化 火烧赤壁代码
查看原帖
求助!离散化 火烧赤壁代码
511268
PIKA_PIKA楼主2021/7/27 19:34
#include<bits/stdc++.h>
using namespace std;

int n;
int a[50000],b[50000];
int dopp=0,d[50000];
int cppo=0,c[50000];
int f[500000]={0};
int check(int x){
    int l=1,r=cppo,m;
    while(l+1<r){
        m=(l+r)>>1;
        if(m>x){
            r=m;
        }
        else{
            l=m;
        }
    }
    return l;
}

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i]>>b[i];
        d[++dopp]=a[i];
        d[++dopp]=b[i];
    }
    sort(d+1,d+dopp+1);
    d[0]=-10000009;
    for(int i=1;i<=dopp;i++){
        if(d[i]!=d[i-1]){
            c[cppo++]=d[i];
        }
    }
    for(int i=1;i<=n;++i){  //有问题:为什么i++和++i最后输出的值不同
        a[i]=check(a[i]);
        b[i]=check(b[i]);
        for(int j=a[i];j<b[i];j++){
            f[j]=1;
        }
    }
    long long ans=0;
    for(int i=1;i<cppo;i++){
        if(f[i]){
            ans+=c[i+1]-c[i];
        }
    }
    cout<<ans;
}

输入

3
-1 1
5 11
2 9

正确输出 11

我的输出 9

2021/7/27 19:34
加载中...