博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Educational Codeforces Round 36 (Rated for Div. 2) E. Physical Education Lessons
阅读量:4314 次
发布时间:2019-06-06

本文共 3737 字,大约阅读时间需要 12 分钟。

提供两种思路

一种线段树区间更新
另一种用map维护连续的区间,也是题解的思路
第二种很难写(我太渣,看了别人的代码,发现自己写的太烦了)

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;const int N = 6e5+5;#define MS(x,y) memset(x,y,sizeof(x))#define MP(x, y) make_pair(x, y)#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1int main() { int n, q; while(~scanf("%d %d", &n, &q)) { map
mp; mp[-1] = -1; mp[1] = n; mp[n+1] = INF; int ans = n; while(q --) { int l, r, k; scanf("%d %d %d", &l, &r, &k); int tt = r; if(k == 2 && r != n) tt = r+1; auto it = mp.upper_bound(l); auto it2 = mp.upper_bound(tt); it --; it2 --; int head1 = it -> first; int len1 = it -> second; int head2 = it2 -> first; int len2 = it2 -> second; while(1){ int flag = 0; if(it == it2) flag = 1; ans -= it->second; auto tmp = it; // if(it->first == n+1) while(1); it ++; // printf("erase: %d\n", tmp->first); mp.erase(tmp); if(flag) break; } //for(auto i = mp.begin(); i != mp.end(); ++i) printf("%d:%d ", i->first, i->second); printf("\n"); // printf("%d %d %d %d %d %d\n", head1, len1, head2, len2, l, r); if(k == 1) { if(head1 + len1 - 1 >= l && l!=head1) { mp[head1] = l - head1; ans += l - head1; } else if(l != head1){ mp[head1] = len1; ans += len1; } if(head2 + len2 - 1 > r) { mp[r+1] = head2 + len2 - 1 - r; ans += head2 + len2 - 1 - r; } } else { int L = l; int R = max(r, head2 + len2 -1); if(head1 + len1 < l) { mp[head1] = len1; ans += len1; }else L = head1; mp[L] = R-L+1; ans += R-L+1; } // for(auto i = mp.begin(); i != mp.end(); ++i) printf("%d:%d ", i->first, i->second); printf("\n"); printf("%d\n", ans); } } return 0;}
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;const int N = 6e5+5;#define MS(x,y) memset(x,y,sizeof(x))#define MP(x, y) make_pair(x, y)#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1int Q[N][3];int has[N * 2]; int cnt;int sum[N << 2];int lazy[N << 2];void build(int l, int r, int rt) { lazy[rt] = 0; sum[rt] = has[r] - has[l-1]; if(l == r) { return; } int m = (l + r) >> 1; build(lson); build(rson);}void update(int ty, int L, int R, int l, int r, int rt) { //printf("%d %d\n", l, r); if(L <= has[l-1]+1 && has[r] <= R) { lazy[rt] = ty == 1? -1 : 1; sum[rt] = ty == 1? 0 : has[r] - has[l-1]; return; } int m = (l + r) >> 1; if(lazy[rt] == 1) { lazy[rt<<1] = 1; sum[rt<<1] = has[m] - has[l-1]; lazy[rt<<1|1] = 1; sum[rt<<1|1] = has[r] - has[m]; lazy[rt] = 0; } else if(lazy[rt] == -1){ lazy[rt<<1] = -1; sum[rt<<1] = 0; lazy[rt<<1|1] = -1; sum[rt<<1|1] = 0; lazy[rt] = 0; } if(L <= has[m-1]+1) update(ty, L, R, lson); if(R > has[m]) update(ty, L, R, rson); sum[rt] = sum[rt<<1] + sum[rt<<1|1];}void debug(int l, int r, int rt) { printf("%d %d %d\n", l, r, sum[rt]); if(l == r) return; int m = (l + r) >> 1; debug(lson); debug(rson);}int main() { int n; while(~scanf("%d", &n)) { cnt = 0; int q; scanf("%d", &q); for(int i = 0; i < q; ++i) { scanf("%d %d %d", &Q[i][0], &Q[i][1], &Q[i][2]); has[cnt ++] = Q[i][0] - 1; has[cnt ++] = Q[i][1]; } has[cnt ++] = 0; has[cnt ++] = n; sort(has, has+cnt); cnt = unique(has, has + cnt) - has;// for(int i = 0; i < cnt; ++i) printf("%d ", has[i]); printf("\n"); build(1, cnt-1, 1); //` debug(1, cnt-1, 1); for(int i = 0; i < q; ++i) { update(Q[i][2], Q[i][0], Q[i][1], 1, cnt-1, 1); printf("%d\n", sum[1]); // debug(1, cnt-1, 1); } } return 0;}

转载于:https://www.cnblogs.com/Basasuya/p/8433682.html

你可能感兴趣的文章
jython学习笔记3
查看>>
Web测试
查看>>
模型搭建练习2_实现nn模块、optim、two_layer、dynamic_net
查看>>
使用jQuery开发datatable分页表格插件
查看>>
C语言笔记(枚举)
查看>>
coreseek安装使用
查看>>
苹果电脑提示打不开 因为它来自身份不明的开发者 不能安装下载的苹果软件解决方法...
查看>>
收发ICMP封包,实现ping
查看>>
MySql command line client 命令系列
查看>>
内置函数2
查看>>
扩展 IEnumerable<T>,让它根据另一个集合的顺序来排列
查看>>
mvc4.0添加EF4.0时发生编译时错误
查看>>
第16月第12天 CABasicAnimation 旋转加速
查看>>
Linux下查看Python安装了哪些脚本模块
查看>>
ERROR- 开发常见error
查看>>
Servlet 中文乱码问题及解决方案剖析
查看>>
OO第四次博客总结
查看>>
集合—ArrayList
查看>>
web前台设计技术
查看>>
Ubuntu14.04 在右键中添加 在终端中打开
查看>>