2018第一场多校 -补题

Posted zgglj-com

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018第一场多校 -补题相关的知识,希望对你有一定的参考价值。

Distinct Values

PS:思路巨明显,就是代码写不出,总想着一次更新一条线段。这里用一个set,存的是当前能用的数的。怎么去更新set,记录上一个区间的左右端点 l , r ,然后类似于莫队的写法。。。。看代码吧。注意上一个区间和当前区间没有公共端点时要特判!!!,也就是代码中的 if 语句 。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<bitset>
#include<vector>
#include<set>
#define ll long long
#define P pair<int, int>
#define PP pair<int,pair<int, int>>
#define pb push_back
#define pp pop_back
#define lson root << 1
#define INF (int)2e9 + 7
#define rson root << 1 | 1
#define LINF (unsigned long long int)1e18
#define mem(arry, in) memset(arry, in, sizeof(arry))
using namespace std;

const int maxn = 100005;

int T, n, m, res[maxn];
P p[maxn];

int main()
{
    cin >> T;
    while(T--) {
        mem(res, 0);
        scanf("%d %d", &n, &m);
        for(int i = 1; i <= m; i++) scanf("%d %d", &p[i].first, &p[i].second);
        sort(p + 1, p + m + 1);

        set<int> unused;
        for(int i = 1; i <= n; i++) unused.insert(i);

        int l = p[1].first, r = p[1].second;
        int t = 0;
        for(int i = l; i <= r; i++) {
            res[i] = ++t;
            unused.erase(t);
        }

        for(int i = 2; i <= m; i++) {
            int tl = p[i].first;
            int tr = p[i].second;
            if(tr <= r) continue;
            while(l < tl) {
                if(res[l]) unused.insert(res[l]);
                l++;
            }
            while(r < tr) {
                ++r;
                if(r >= tl) {
                    res[r] = *unused.begin();
                    unused.erase(res[r]);
                }
            }
        }

        for(int i = 1; i <= n; i++) printf("%d%c", (res[i] == 0 ? 1 : res[i]), (i == n ? 
 :  ));

    }
    return 0;
}

 

以上是关于2018第一场多校 -补题的主要内容,如果未能解决你的问题,请参考以下文章

杭电2018多校第一场(2018 Multi-University Training Contest 1) 1001.Maximum Multiple (HDU6298)-数学思维题(脑子是个好东西,

2018年全国多校算法寒假训练营练习比赛(第一场)G.圆圈

牛客多校2018第一场 I Substring (不同子串的个数)

牛客网_2018年全国多校算法寒假训练营练习比赛(第一场)_部分题解

2018年全国多校算法寒假训练营练习比赛(第一场)D N阶汉诺塔变形

杭电2018多校第一场(2018 Multi-University Training Contest 1) 1008.RMQ Similar Sequence (HDU6305) -笛卡尔树+数学期望