总结

这个考试第一题是送的,第二题也就暴力枚举而已了,贪心思想。

首先第一题你要找出0,8,9的特点,特点我不说了(还是说一下吧,8是即第一行第三行第五行 1 的个数一样,第二行第四行 1 的个数一样就好了,9也许你知道了,0就是剩下的, 8,9之后一定是0了)

第二题的代码我不放了,别的tj思路已经很清晰了,或者说这道题就是需要预处理一下的dp

至于第3题我送你们一个错误代码(超时的)

#include<bits/stdc++.h>
#define F(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
inline int read();
const int N=1e5+10;
int n,q,a[N],l,r;
struct P{
    int l,r;
}b[N];
inline int sol(){
    int x=l,k=0;
    while(x<=r)x=b[x].r,++k;
    return k;
}
int st[N<<1],top;
inline void init(){
    a[n+1]=INT_MAX;
    F(i,1,n+1){
        while(top and a[st[top]]<a[i])b[st[top--]].r=i;
        b[i].l=st[top];
        st[++top]=i;
    }
}
int main(){
    n=read(),q=read();
    F(i,1,n)a[i]=read();
    init();
    while(q--){
        l=read(),r=read();
        printf("%d\n",sol());
    }
    return 0;
}
inline int read(){
    int x=0;
    char c=getchar();
    while(!isdigit(c))c=getchar();
    while(isdigit(c))x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x