zoukankan      html  css  js  c++  java
  • [CF1450D] Rating Compression

    [CF1450D] Rating Compression

    Description

    给定序列,问长度为 (k) 的滑动窗口最小值是否构成排列

    Solution

    (k=1) 的情况特判掉

    用双端队列,初态为 ([a_1,a_2,...,a_n])

    (1)(n) 枚举 (c) 的长度 (i)

    若数 (i) 没有出现,则长度 (ge i) 的都废了

    若数 (i) 出现了,则长度 (=i) 的活了

    若数 (i) 出现在当前剩余部分的头尾,那么删掉他并继续

    若数 (i) 出现在当前剩余部分的中间,或者出现次数大于 (1),那么长度 (>i) 的都死了

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    void solve()
    {
        int n;
        cin >> n;
        vector<int> a(n + 2);
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        vector<int> ans(n + 2);
        vector<int> cnt(n + 2);
        for (int i = 1; i <= n; i++)
            cnt[a[i]]++;
        if (*max_element(&cnt[1], &cnt[n + 1]) == 1)
            ans[1] = 1;
        deque<int> que;
        for (int i = 1; i <= n; i++)
            que.push_front(a[i]);
        for (int i = 1; i < n; i++)
        {
            if (cnt[i] == 0)
                break;
            ans[n - i + 1] = 1;
            if (que.front() == i)
                que.pop_front();
            else if (que.back() == i)
                que.pop_back();
            else
                break;
            if (cnt[i] > 1)
                break;
        }
        for (int i = 1; i <= n; i++)
            cout << ans[i];
        cout << endl;
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
        int t;
        cin >> t;
        while (t--)
        {
            solve();
        }
    }
    
  • 相关阅读:
    UIPickerView-一.01-
    闭包-01-Swift
    Swift 入门-01-概述
    git使用命令行-01-自己操作的
    FetchedResultsController-03-CoreData相关
    SQLite-05-增删改查
    Sqlite函数总结-04
    List<string>转xml
    比较两个List<T>是否相同
    获取DataTable前几条数据
  • 原文地址:https://www.cnblogs.com/mollnn/p/14557401.html
Copyright © 2011-2022 走看看