题目分析:我们只关注第一次熄灭,熄灭区间是[i,n],所以后续再出现的值如果大于等于i是不起任何作用的。每次读取开关编号x,如果前面有比x小的编号,x就不起作用。
模拟即可,复杂度O(m+n)
cpp
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int v[100005];
int main()
{
ios::sync_with_stdio(0),cin.tie(0);
int i,j,x,n,m,minv;
cin>>n>>m;
minv=n+1;
for(i=1; i<=m; i++)
{/**< 关灯的逻辑:如果前面有比x小的值,哪么[x,n]所在的灯已经打开了 */
cin>>x;
if(x<minv)
{
for(j=x; j<minv; j++)
v[j]=i;
minv=x;
}
}
for(i=1;i<=n;i++)
cout<<v[i]<<' ';
return 0;
}