和大众的做法都不太一样,思路比较简单,实现。。。也比较简单
这题部分分真的能提示很多(为什么洛谷上没有部分分),考场上本来在想怎么拿部分分,然后看了一下部分分,想了一下他们的性质,然后。。。就想出正解了。。。但是不会实现嘤嘤嘤
首先我们看看编号为 2 2 2 和 3 3 3 的块的性质:他们按规则接在某一个块后面,是不会改变这个块的突出情况的
比如: 5 5 5 的右边原本是凸出的,我们把 3 3 3 接在 5 5 5 后面以后,整个块的右边还是凸出的
换句话说,当我们在全部给出的块中去除所有 2 2 2 和 3 3 3 的块,求出字典序最小的,然后再把 2 2 2 和 3 3 3 的块插进去就行了
而当 2 2 2 和 3 3 3 的去掉后,能在中间部分的就只有 1 1 1 和 4 4 4 了,发现这两个只能交替出现,并且谁先谁后是固定的(可以根据起始块和末尾块的形状确定),然后又由于有一个字典序最小的要求,拍一个序后再放就行了
插 2 2 2 和 3 3 3 也就简单了,具体的话看代码
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
const int MAXN=1e5+5;
struct date{
int id,v;
bool vis;
date(){
}
date(int ID,int V){
vis=0,id=ID,v=V;
}
}