Physical Education Lessons
Physical Education Lessons
https://ac.nowcoder.com/acm/problem/112531
分析
非常平凡的一道题,没太大意义。这里放松,敲了一个 。有区间覆盖的,如果保证随机,其实 还是不错的。
代码
#include<bits/stdc++.h> using namespace std; struct Node{ int l,r; mutable int c; bool operator <(const Node a) const { return l < a.l; } Node(int _l,int _r = 0,int _c = 0) {l=_l;r=_r;c=_c;} }; set<Node> s; #define It set<Node>::iterator int n,m; int read(){int x;scanf("%d",&x);return x;} It split(int pos) { It it = s.lower_bound((Node){pos,0,0}); if(it != s.end() && it -> l == pos) return it; --it;int l = it->l,r = it->r,c = it -> c; s.erase(it);s.insert((Node){l,pos-1,c}); return s.insert((Node){pos,r,c}).first; }int sum; void assgin(int l,int r,int c) { It itr = split(r + 1),itl = split(l); for(It it = itl;it != itr;++it) { sum -= (it->r-it->l+1) * it->c; } s.erase(itl,itr); s.insert((Node){l,r,c}); sum += (r - l + 1) * c; } int main() { n = read();m = read(); s.insert((Node){1,n,1});sum = n; while(m--) { int l = read(),r = read(),k = read() - 1; assgin(l,r,k); printf("%d\n",sum); } }