P3522 [POI2011]TEM-Temperature

P3522 [POI2011]TEM-Temperature

直接set维护就好了,不知道我为啥写单调队列。

移动头指针的条件当然是在set里元素 \(l\) 的最大值大于当前元素的 \(r\) 了,边移边取 \(\max\) 就行

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <set>

using namespace std;

typedef long long ll;
const ll MAXN = 1e6+10;

ll N;

struct line {
    ll l, r;
    friend bool operator < (line a, line b) {return a.l > b.l;}
} E[MAXN];

multiset <line> st;
ll q[MAXN], head = 1, tail = 0, ans = 0;

int main() {
    scanf("%lld", &N);
    for (ll i = 1; i <= N; i++)
        scanf("%lld%lld", &E[i].l, &E[i].r);
    for (ll i = 1; i <= N; i++) {
        while (head <= tail && st.begin()->l > E[i].r) st.erase(st.find(E[q[head]])), head++;
        q[++tail] = i;
        st.insert(E[i]);
        ans = max(ans, q[tail] - q[head] + 1);
    }
    printf("%lld\n", ans);
    return 0;
}
posted @ 2020-10-30 22:18  Gensokyo_Alice  阅读(49)  评论(0编辑  收藏  举报