题解 P1420 【最长连号】

这个题过去的同学可以再来一题(P1567 统计天数):
https://www.luogu.org/problemnew/show/P1567
是的,这个题其实也不是很难,就是前后比较,将天数压栈,
然后对那些天数进行排序,十分的神奇...


这个题可以用打擂台(stack/queue),但是我用的优先队列。
优先队列是指大小根堆,但是应该是以队列方式存储的STL模板库。
好处就是这个队列的根部(最顶端)是最大值,
每个子节点也相对于第二层子节点是最大值,以此类推...
优先队列自我维护!
那么就有了下面的代码:

#include <cstdio>
#include <queue>
//优先队列/queueのSTL模板库
using namespace std;
priority_queue<int>qwq;
//大名鼎鼎的优先队列
int main()
{
    int n,input,former,later,count=1;
    scanf("%d",&n);
    scanf("%d",&former);
    later=former+1;
    for (int i=1;i<n;i++)
    {
        scanf("%d",&input);
        if (input!=later)
        {//不连号的话,就更新下一个要用的比较值,和统计count
            qwq.push(count);
            //更新之前先把之前的统计压进优先队列
            later=input+1,count=1;
        }
        else
        {//连号也更新
            count+=1,later+=1;
        }
    }
    qwq.push(count);//防毒瘤数据1
    printf("%d",qwq.top());//输出最顶端数据
    return 0;
}

优先队列是一个好东西,感兴趣的童鞋可以用他再来几个题!

原文地址:https://www.cnblogs.com/jelly123/p/10385942.html