数轴染色
【codevs1191】数轴染色
题目描述 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
#include<iostream> #include<queue> #include<cstdio> #include<math.h> #include<cstring> #include<algorithm> using namespace std; int tot[2000009]; bool b[2000009]; int n,m; void build(int l,int r,int id) { tot[id]=r-l+1; if(l == r) {return; } int mid=(l+r)/2; build(l,mid,id*2);build(mid+1,r,id*2+1); return; } void set(int l,int r,int id) { b[id*2]=1; b[id*2+1]=1; tot[id*2]=0;tot[id*2+1]=0; b[id]=0; } void add(int l,int r,int id,int tl,int tr) { if(tl<=l&&r<=tr) { tot[id]=0;b[id]=1; return ; } if(b[id]) set(l,r,id); int mid=(l+r)/2; if(tl<=mid) add(l,mid,id*2,tl,tr); if(tr>mid) add(mid+1,r,id*2+1,tl,tr); tot[id]=tot[id*2]+tot[id*2+1]; return; } int main() { scanf("%d%d",&n,&m); build(1,n,1); for(int i=1,l,r;i<=m;i++) { scanf("%d%d",&l,&r);add(1,n,1,l,r); cout<<tot[1]<<endl; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App