修改数组
本来我的思路很一般,用一个set,记录每一段的最值,然后分情况讨论,如果查询到未记录的,那就直接输出,并记录。如果当前值前面已经有过,那就直接从set中调出首个比他大的值,就是该段最值(下面我称之为大哥)。
错误思路:
for (int i = 0; i < n; i++)
{
cin >> a;
if (book[a] == 0) //如果没有标记过
{
if (book[a - 1] == 0 && book[a + 1] == 0) //单独作为大哥
{
book[a] = 2;
prime.insert(a);
}
else if (book[a - 1] == 2 && book[a + 1] == 0) //在其他大哥之前
{
book[a - 1] = 1;
book[a] = 2;
prime.erase(a - 1);
prime.insert(a);
}
else if(book[a - 1] == 0 && book[a + 1] != 0) //接在屁股后面,不管他
book[a] = 1;