day-2

Educational Codeforces Round 111 (Rated for Div. 2)

7.25 upd.

C. Manhattan Subarrays

比赛的时候想出来了 过了一周全忘了...
因为是统计整个数组的good arrays 序号就是点的横坐标 又因为 不组成bad triple 那么类似1 2 0 1 就是最长的合法串
即: 不满足 \(a_i <= a_j <= a_k || a_i >= a_j >= a_k\) 的 array 长度最大为4
直接暴力判断有多少长度为3 or 4的subarray满足就行

const int maxn = 1e6 + 7;

bool check(int a, int b, int c) {
    return (a <= b && b <= c) || (a >= b && b >= c);
}

bool check(vector<int> vec) {
    if (vec.size() <= 2)
        return 1;
    for (int i = 0; i < vec.size(); i++)
        for (int j = i + 1; j < vec.size(); j++)
            for (int k = j + 1; k < vec.size(); k++)
                if (check(vec[i], vec[j], vec[k]))
                    return 0;
    return 1;
}

int n, t, m, a[maxn];

void solve() {
    cin >> t;
    while (t--) {
        cin >> n;
        for (int i = 0; i < n; ++i)
            cin >> a[i];
        int ans = 0;
        for (int st = 0; st < n; st++)
            for (int len = 1; len <= 4; len++) {
                int ed = st + len;
                if (ed > n)
                    continue;
                vector<int> vec;
                for (int i = st; i < ed; i++)
                    vec.push_back(a[i]);
                ans += check(vec);
            }
        cout << ans << endl;
    }

#todo D E要补下...

困。。。
好像有些抑郁
有场cf 不知道咋样 菜哭

posted @ 2021-07-14 20:32  naymi  阅读(47)  评论(0)    收藏  举报