所以这题单调队列的意义是?
查看原帖
所以这题单调队列的意义是?
370037
_farawaystar_楼主2023/11/3 23:25

RT.

个人觉得完全没有必要用单调队列,不难分析出答案也是具有单调性的,换句话说插入的新元素肯定会顶替原来的老元素,那么直接用一个寄存的变量记录下来就可以了,完全没有必要用单调队列

比如这份代码就可以通过本题```cpp #include <bits/stdc++.h> using namespace std; const int N=200005; int n,m,minl[N],maxl[N],f[N],j=1,re; bool opt=1; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n+1;i++) minl[i]=i; for(int i=1,l,r;i<=m;i++){ scanf("%d%d",&l,&r); minl[r]=min(minl[r],l); maxl[r+1]=max(maxl[r+1],l); } for(int i=n;i>=1;i--)minl[i]=min(minl[i],minl[i+1]); for(int i=1;i<=n+1;i++)maxl[i]=max(maxl[i],maxl[i-1]); for(int i=1;i<=n+1;i++){ for(;j<minl[i];j++) if(f[j]!=-1){ opt=1; re=j; } if(opt&&re<maxl[i])opt=0; if(opt)f[i]=f[re]+(i!=n+1); else f[i]=-1; } printf("%d",f[n+1]); return 0; }

2023/11/3 23:25
加载中...