C++ "校门外的树" 刷题出错,想知道问题在哪

原题链接:https://www.luogu.com.cn/problem/P1047

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int m,l,u,v;
     cin>>l>>m;
    short yn[l]={0},s=0;
    
    for(int i=0;i<m;i++){
        cin>>u>>v;
        for(int j=u;j<=v;j++) yn[j]=1;
    }
    
    for(int i=0;i<=l;i++)
        if(yn[i]==0) s++;
    cout<<s<<endl;
    return (0);
}

这段码根据下图改的

img


看着左右都一样.结果和改之前 和案例总差一.
想请教一下问题在哪?

引用头文件<bits/stdc++.h>它不是标准C++库的一部分。应该使用具体的标准库头文件。在声明 int m,l,u,v; 之后,直接在数组 short yn[l]={0},s=0; 中使用变量 l 作为数组长度是不允许的,因为C++中的数组大小必须是一个常量表达式。这里可以改为先读取输入的 l 值并进行赋值。循环 for(int i=0;i<=l;i++) 会导致数组越界访问,因为数组 yn 的有效下标是从0到 l-1。所以在这个循环中应该修改为 for(int i=0;i<l;i++)。在输出结果 cout<<s<<endl; 后面的 (0) 不必要,可以直接写成 return 0;