80分求教,第一个点错

P1047 [NOIP2005 普及组] 校门外的树

jiashuangqi_oh_no @ 2024-10-06 16:30:23

我这里面哪里错了,求大佬解释。

#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int main(){
    int n,num,u,v;
    cin>>n>>num;
    vector<long long> a(n+2,0);
    vector<long long> d(n+2,0);
    for(int i=1;i<=n;i++)
    {
        d[i]=a[i]-a[i-1];
    }
    for(int i=1;i<=num;i++)
    {
        cin>>u>>v;
        d[u]+=1;
        d[v+1]-=1;
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        a[i]=a[i-1]+d[i];
    }
    for(int i=0;i<=n;i++)
    {
        if(a[i]==0)
        {
            ans++;
        }
    }
    cout<<ans;
}

by lijunxian_0818_2 @ 2024-10-06 21:26:53

@jiashuangqi_oh_no

这边建议您用二分! 我最开始也是这么做的,后来用二分(函数)就做对了


by Enteral @ 2024-10-13 14:49:28

@jiashuangqi_oh_no

#include<bits/stdc++.h>
using namespace std;
bool f[10001];
int l,m,tot;
int main()
{
    cin>>l>>m;
    for(int i=0;i<m;i++)
    {
        int beg,end;
        cin>>beg>>end;
        for(int j=beg;j<=end;j++)f[j]=1;
    }
    for(int i=0;i<=l;i++)if(f[i]==0)tot++;
    cout<<tot;
    return 0;
}

|