【马蜂良好,玄题解点赞】ATcoder F 求调
  • 板块学术版
  • 楼主Windy_YY
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/18 22:03
  • 上次更新2024/5/18 23:22:05
查看原帖
【马蜂良好,玄题解点赞】ATcoder F 求调
378467
Windy_YY楼主2024/5/18 22:03

帮我调出来的获得 min⁡(你的题解总数,6)\min(你的题解总数,6) 个题解点赞(一篇两个)。

#include <bits/stdc++.h>

using namespace std;

const int N = 5e5 + 10;
int a[N], arr1[N], arr2[N], t[N], c[N];

int main()
{
  int n;
  int T;
  cin >> T;
  while (T--)
  {
    cin >> n;
    for (int i = 1; i <= n; i ++)
      scanf ("%d", &a[i]);
    for (int i = 0; i <= n + 1; i ++)
      arr1[i] = arr2[i] = t[i] = 0;
    int cnt = 0;  
    for (int i = 1; i <= n; i ++)
      if (a[i] > t[cnt])
      {
        arr1[i] = ++ cnt;
        t[cnt] = a[i];
      }
      else
      {
        auto p = upper_bound(t + 1, t + cnt + 1, a[i]) - t;
        arr1[i] = p;
        t[p] = a[i];
      }
    cnt = 0;
    for (int i = 1; i <= n; i ++)
      a[i] = -a[i];
    for (int i = 0; i <= n + 1; i ++)
      c[i] = -1e9;
    for (int i = n; i; i --)
      if (a[i] > c[cnt])
      {
        arr2[i] = ++ cnt;
        c[cnt] = a[i];
      }
      else
      {
        auto p = upper_bound(c + 1, c + cnt + 1, a[i]) - c;
        arr2[i] = p;
        c[p] = a[i];
      }
    for (int i = 1; i <= n; i ++)
      a[i] = -a[i];
    vector <int> cent;
    for (int i = 1; i <= n; i ++)
      if (arr1[i] + arr2[i] - 1 == cnt)
        cent.push_back(i);
    printf ("%d\n", (int)cent.size());
    sort (cent.begin(), cent.end());
    for (auto &u : cent)
      printf ("%d ", u);
    printf ("\n");
  }
  return 0;
}
2024/5/18 22:03
加载中...