Codevs 1191 数轴染色
1191 数轴染色
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题目描述 Description
在一条数轴上有N个点,分别是1~N。一开始所有的点都被染成黑色。接着
我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色。请输出每个操作执行后
剩余黑色点的个数。
输入描述 Input Description
输入一行为N和M。下面M行每行两个数Li、Ri
输出描述 Output Description
输出M行,为每次操作后剩余黑色点的个数。
样例输入 Sample Input
10 3
3 3
5 7
2 8
样例输出 Sample Output
9
6
3
数据范围及提示 Data Size & Hint
数据限制
对30%的数据有1<=N<=2000,1<=M<=2000
对100%数据有1<=Li<=Ri<=N<=200000,1<=M<=200000
分类标签 Tags
线段树 树结构
/*
W.
lazy设为0 1两种状态.
题中数据有误QWQ.
*/
#include<iostream>
#include<cstdio>
#define MAXN 200001
#define LL long long
using namespace std;
int n,m,cut;
struct data
{int sum;bool bj;int lc,rc;int l,r;int tot;
}
tree[MAXN*4];
void build(int l,int r)
{int k=++cut;tree[k].l=l,tree[k].r=r;if(l==r){tree[k].sum=1;return ;}int mid=(l+r)>>1;tree[k].lc=cut+1;build(l,mid);tree[k].rc=cut+1;build(mid+1,r);tree[k].sum=tree[tree[k].lc].sum+tree[tree[k].rc].sum;
}
void up(int k)
{tree[tree[k].lc].bj=true;tree[tree[k].rc].bj=true;tree[k].bj=0;
}
void add(int k,int l,int r)
{if(l<=tree[k].l&&tree[k].r<=r){tree[k].bj=1;tree[k].sum-=(tree[k].r-tree[k].l+1);tree[k].sum=max(0,tree[k].sum);return ;}if(tree[k].bj) up(k);int mid=(tree[k].l+tree[k].r)>>1;if(r<=mid) add(tree[k].lc,l,r);else if(l>mid) add(tree[k].rc,l,r);else add(tree[k].lc,l,mid),add(tree[k].rc,mid+1,r);tree[k].sum=tree[tree[k].lc].sum+tree[tree[k].rc].sum;
}
int query(int k,int l,int r)
{if(l<=tree[k].l&&tree[k].r<=r){return tree[k].sum;}LL tot=0;if(l==r) return 0;if(tree[k].bj) up(k);int mid=(tree[k].l+tree[k].r)>>1;if(r<=mid) tot+=query(tree[k].lc,l,r);else if(l>mid) tot+=query(tree[k].rc,l,r);else tot+=query(tree[k].lc,l,mid),tot+=query(tree[k].rc,mid+1,r);tree[k].sum=tree[tree[k].lc].sum+tree[tree[k].rc].sum;return tot;
}
int main()
{int a,b;cin>>n>>m;build(1,n);for(int i=1;i<=m;i++){cin>>a>>b;add(1,a,b);query(1,1,n);printf("%d\n",tree[1].sum);}return 0;
}
/*
A.
区间修改+区间查询.
题中数据明显有问题QWQ.
*/
#include<iostream>
#include<cstdio>
#define MAXN 200001
#define ll long long
using namespace std;
ll n,m,tot,cut,aa[MAXN+10];
struct data
{int l,r;int lc,rc;int sum;ll bj;
}tree[MAXN*4];
void build(int l,int r)
{int k=++cut;tree[k].l=l;tree[k].r=r;if(l==r){tree[k].sum=1;return ;}int mid=(l+r)>>1;tree[k].lc=cut+1;build(l,mid);tree[k].rc=cut+1;build(mid+1,r);tree[k].sum=tree[tree[k].lc].sum+tree[tree[k].rc].sum;
}
void updata(int k)
{tree[tree[k].lc].sum+=tree[k].bj*(tree[tree[k].lc].r-tree[tree[k].lc].l+1);tree[tree[k].rc].sum+=tree[k].bj*(tree[tree[k].rc].r-tree[tree[k].rc].l+1);tree[tree[k].lc].bj+=tree[k].bj;tree[tree[k].rc].bj+=tree[k].bj;tree[k].bj=0;tree[tree[k].lc].sum=max(tree[tree[k].lc].sum,0);tree[tree[k].rc].sum=max(tree[tree[k].rc].sum,0);
}
void add(int k,int l,int r,int add1)
{if(l<=tree[k].l&&tree[k].r<=r){tree[k].bj-=add1;tree[k].sum-=add1*(tree[k].r-tree[k].l+1);tree[k].sum=max(0,tree[k].sum);return ;}if(tree[k].bj) updata(k);int mid=(tree[k].l+tree[k].r)>>1;if(l<=mid) add(tree[k].lc,l,r,add1);if(r>mid) add(tree[k].rc,l,r,add1);tree[k].sum=tree[tree[k].lc].sum+tree[tree[k].rc].sum;
}
ll query(int k,int l,int r)
{if(l<=tree[k].l&&tree[k].r<=r) return tree[k].sum;ll tot=0;if(tree[k].bj) updata(k);int mid=(tree[k].l+tree[k].r)>>1;if(l<=mid) tot+=query(tree[k].lc,l,r);if(r>mid) tot+=query(tree[k].rc,l,r);tree[k].sum=tree[tree[k].lc].sum+tree[tree[k].rc].sum;return tot;
}
int main()
{int x,a,b,add1;cin>>n;build(1,n);cin>>m;for(int i=1;i<=m;i++){scanf("%d %d",&a,&b);add(1,a,b,1);printf("%lld\n",query(1,1,n));}return 0;
}
转载于:https://www.cnblogs.com/nancheng58/p/6070785.html
Codevs 1191 数轴染色相关推荐
- codevs 1191 树轴染色 线段树区间定值,求和
codevs 1191 树轴染色 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1191/ Des ...
- [CODEVS 1050] 棋盘染色 2
描述 有一个5*N的棋盘,棋盘中的一些格子已经被染成了黑色,你的任务是对最少的格子染色,使得所有的黑色能连成一块. http://codevs.cn/problem/1050/ 分析 CODEVS 题 ...
- Codevs 1049 棋盘染色
1049 棋盘染色 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有一个5×5的棋盘,上面有一些格子被染成了黑色,其他 ...
- [Codevs] 1014 棋盘染色
1049 棋盘染色 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有一个5×5的棋盘,上面有一些格子被染成了黑色,其他的格子 ...
- NOIP知识汇总及模板整理
排序 求逆序对 NOIP2013火柴排队 洛谷 P2309 loidc 卖卖萌 二分 牢记二分姿势 前缀和及差分优化 NOIP2012借教室差分优化 贪心 洛谷 P3093 牛奶调度 HDU 5500 ...
- CODEVS——T 1049 棋盘染色
http://codevs.cn/problem/1049/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descripti ...
- codevs 5963 [SDOI2017]树点染色
[题解]: #include<cstdio> #include<cstring> #include<iostream> using namespace std; ...
- [codevs 1907] 方格取数3
[codevs 1907] 方格取数3 题解: 二分图染色.最大点权独立集. 因为要用到最大独立集的一些思路,故先写了一篇最大独立集的题解:http://blog.csdn.net/qq_211102 ...
- codeforces 1635E-Cars (二分图染色+拓扑排序)
传送门 difficult:2200difficult:2200difficult:2200 题意 数轴上存在 nnn 辆车和 mmm 个限制,每个限制以 opopop.uuu.vvv 的形式表示,其 ...
最新文章
- 【译】需要学习的是编程,而不是编程语言
- js前面代码出错继续运行_Node.JS实战41:让命令行变的五颜六色
- 【算法竞赛学习】二手车交易价格预测-Task4建模调参
- 啥情况?为什么我的 Service 无法注入进来?
- python对称加密_【Python】 基于秘钥的对称加密
- mysql5.7主从恢复_MySQL 5.7 开启主从同步开启GTID恢复数据
- poj 1011 - sticks - dfs + 剪枝
- Win10安装.net framework 4.0失败提示已是操作系统一部分解决方案
- win10系统:虚拟桌面的创建、切换、删除快捷键
- Mono.Cecil简介与示例
- 提莫队长正在待命(DP)
- 比较连个字符串差异度
- 计算机学院王春枝教授实验室,全国高等学校计算机科学与技术教学成果获奖证书.doc...
- STM32CubeMX学习笔记(25)——FatFs文件系统使用(操作SPI Flash)
- 犹豫两年,我还是重回大厂996了:还是得先搞钱
- ipad如何找到.开头的隐藏文件夹
- VS2017中处理命令行参数的方法----C++语言 Windows系统
- 关于 web cam 使用自家的摄像头实现 视频捕捉技术 高级篇
- redis中使用lua脚本
- 1004 Let the Balloon Rise