题意:
单点更新模板
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5+10;
#define ls o<<1
#define rs o<<1|1
struct node {
int l, r, x;
bool v;
}t[MAXN<<2];
void push_up(int o) {
t[o].x = t[ls].x+t[rs].x;
}
void push_down(int o) {
if(t[o].v) {
t[ls].v = t[rs].v = true;
t[ls].x = t[rs].x = 0;
t[o].v = false;
}
}
void build(int l, int r, int o) {
t[o].l = l, t[o].r = r;
t[o].x = r-l+1, t[o].v = false;
if(l == r) return;
int mid = (l+r)>>1;
build(l,mid,ls); build(mid+1,r,rs);
}
void update(int l, int r, int o) {
if(t[o].l>=l && r>=t[o].r) {
t[o].x = 0;
t[o].v = true;
return;
}
push_down(o);
int mid = (t[o].l+t[o].r)>>1;
if(r <= mid)
update(l, r, ls);
else if(l > mid)
update(l, r, rs);
else {
update(l,mid,ls); update(mid+1,r,rs);
}
push_up(o);
}
int main() {
int n;
while(cin >> n) {
build(0, 1440-1, 1);
for(int i = 0; i < n; ++i) {
int sh, sm, th, tm;
scanf("%d:%d%d:%d", &sh, &sm, &th, &tm);
int s = sh * 60 + sm;
int t = th * 60 + tm - 1;
if(s <= t) update(s, t, 1);
}
cout << t[1].x << endl;
}
return 0;
}