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
", ans);
return 0;
}