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 数轴染色相关推荐

  1. codevs 1191 树轴染色 线段树区间定值,求和

    codevs 1191 树轴染色 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1191/ Des ...

  2. [CODEVS 1050] 棋盘染色 2

    描述 有一个5*N的棋盘,棋盘中的一些格子已经被染成了黑色,你的任务是对最少的格子染色,使得所有的黑色能连成一块. http://codevs.cn/problem/1050/ 分析 CODEVS 题 ...

  3. Codevs 1049 棋盘染色

    1049 棋盘染色  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description 有一个5×5的棋盘,上面有一些格子被染成了黑色,其他 ...

  4. [Codevs] 1014 棋盘染色

    1049 棋盘染色  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 有一个5×5的棋盘,上面有一些格子被染成了黑色,其他的格子 ...

  5. NOIP知识汇总及模板整理

    排序 求逆序对 NOIP2013火柴排队 洛谷 P2309 loidc 卖卖萌 二分 牢记二分姿势 前缀和及差分优化 NOIP2012借教室差分优化 贪心 洛谷 P3093 牛奶调度 HDU 5500 ...

  6. CODEVS——T 1049 棋盘染色

    http://codevs.cn/problem/1049/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Descripti ...

  7. codevs 5963 [SDOI2017]树点染色

     [题解]: #include<cstdio> #include<cstring> #include<iostream> using namespace std; ...

  8. [codevs 1907] 方格取数3

    [codevs 1907] 方格取数3 题解: 二分图染色.最大点权独立集. 因为要用到最大独立集的一些思路,故先写了一篇最大独立集的题解:http://blog.csdn.net/qq_211102 ...

  9. codeforces 1635E-Cars (二分图染色+拓扑排序)

    传送门 difficult:2200difficult:2200difficult:2200 题意 数轴上存在 nnn 辆车和 mmm 个限制,每个限制以 opopop.uuu.vvv 的形式表示,其 ...

最新文章

  1. 【译】需要学习的是编程,而不是编程语言
  2. js前面代码出错继续运行_Node.JS实战41:让命令行变的五颜六色
  3. 【算法竞赛学习】二手车交易价格预测-Task4建模调参
  4. 啥情况?为什么我的 Service 无法注入进来?
  5. python对称加密_【Python】 基于秘钥的对称加密
  6. mysql5.7主从恢复_MySQL 5.7 开启主从同步开启GTID恢复数据
  7. poj 1011 - sticks - dfs + 剪枝
  8. Win10安装.net framework 4.0失败提示已是操作系统一部分解决方案
  9. win10系统:虚拟桌面的创建、切换、删除快捷键
  10. Mono.Cecil简介与示例
  11. 提莫队长正在待命(DP)
  12. 比较连个字符串差异度
  13. 计算机学院王春枝教授实验室,全国高等学校计算机科学与技术教学成果获奖证书.doc...
  14. STM32CubeMX学习笔记(25)——FatFs文件系统使用(操作SPI Flash)
  15. 犹豫两年,我还是重回大厂996了:还是得先搞钱
  16. ipad如何找到.开头的隐藏文件夹
  17. VS2017中处理命令行参数的方法----C++语言 Windows系统
  18. 关于 web cam 使用自家的摄像头实现 视频捕捉技术 高级篇
  19. redis中使用lua脚本
  20. 1004 Let the Balloon Rise

热门文章

  1. 变电所自动化系统的电源配置
  2. python 将二维数组旋转_python 二维数组90°旋转
  3. SQL从入门到入魔之初入门
  4. 今日恐慌与贪婪指数为72 贪婪程度有所缓解
  5. ChaiNext:市场短期内延续区间震荡
  6. 最近30分钟合约市场爆仓702万美元 BTC爆仓281万美元
  7. SAP License:内部顾问的培养与成长
  8. 赛锐信息:SAP设计ERP主路线
  9. 实战篇—关于某产品的切分细则
  10. 用户画像-标签体系(dwt层)