Educational Codeforces Round 36 (Rated for Div. 2) E. Physical Education Lessons
提供两种思路
一种线段树区间更新
另一种用map维护连续的区间,也是题解的思路
第二种很难写(我太渣,看了别人的代码,发现自己写的太烦了)
#include<iostream>
#include<map>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<cmath>
#include<algorithm>
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|1
int main() {
int n, q;
while(~scanf("%d %d", &n, &q)) {
map<int, int> 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<iostream>
#include<map>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<cmath>
#include<algorithm>
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|1
int 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;
}
Educational Codeforces Round 36 (Rated for Div. 2) E. Physical Education Lessons的更多相关文章
- Educational Codeforces Round 36 (Rated for Div. 2)
A. Garden time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...
- Educational Codeforces Round 36 (Rated for Div. 2) G. Coprime Arrays
求a_i 在 [1,k]范围内,gcd(a_1,a_2...,a_n) = 1的a的数组个数. F(x)表示gcd(a_1,a_2,...,a_n) = i的a的个数 f(x)表示gcd(a_1,a_ ...
- Educational Codeforces Round 71 (Rated for Div. 2)-E. XOR Guessing-交互题
Educational Codeforces Round 71 (Rated for Div. 2)-E. XOR Guessing-交互题 [Problem Description] 总共两次询 ...
- Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship
Problem Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...
- Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
- Educational Codeforces Round 43 (Rated for Div. 2)
Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...
- Educational Codeforces Round 35 (Rated for Div. 2)
Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...
随机推荐
- 测试SM图床
- python matplotlib 播放图片变化过程
最近想将原图片和处理后的图片放在一起观察图片的变化过程.但是网上并么有找到有用的示例代码,所以粘出来和大家分享一下. import numpy as np import matplotlib.pypl ...
- ACE_TEST1.obj : error LNK2019: 无法解析的外部符号
ACE_TEST1.obj : error LNK2019: 无法解析的外部符号 "int __cdecl ace_main_i(int,char * * const)" (?ac ...
- angularjs中类似textarea的换行、空格处理
背景 今天测试人员测试出来一个显示数据的页面,没有换行. 原因剖析 这个页面是从一个<textarea>的页面拿到的数据,存到数据库中后再返回来的. 1. 知道这点之后,就有了调查方向了: ...
- egametang框架服务端运行流程
et框架的构建块主要由entity和componet组成,类似unity的组件.一个Entity可以挂载多个不同Component.Entity和Component的共同基类Disposer用于提供对 ...
- centos6.9 开机进入grub界面问题解决
安装系统时没把之前的磁盘分区格式化,导致安装新系统grub冲突 解决办法:删除当前磁盘分区,重新安装系统
- Java基础系列--final关键字
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8482909.html 一.概述 final是Java关键字中最常见之一,表示"最 ...
- 排序算法(Java实现)
这几天一直在看严蔚敏老师的那本<数据结构>那本书.之前第一次学懵懵逼逼,当再次看的时候,发觉写的是非常详细,非常的好. 那就把相关的排序算法用我熟悉的Java语言记录下来了.以下排序算法是 ...
- java8 - IO
一.学习大纲: 1. 字符编码格式 2. 文件操作(实现文件的增.删.改.查等操作) 3. 目录操作(实现目录的增.删.改.查等操作) 4. 数据传输(实现对文件内容的读.写等操作) 二.关联类: 1 ...
- Jenkins系列——使用checkstyle进行代码规范检查
1.目标 通过jenkins使用checkstyle对代码进行规范检查并生成html报告. 构建采用shell. 2.环境 checkstyle5.7(如果是Linux版本选用tar.gz格式) ap ...