博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数轴染色
阅读量:7175 次
发布时间:2019-06-29

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

这里写图片描述

这里写图片描述

这个数据范围是要nlogn的做法嘛。
线段树:一开始把数组全设为1,建一下树,然后修改的时候把白球全修改成0,每次用线段树求和就好了。
不过我确实调了一个上午啊。感谢sxb大神帮我找错

#include
#include
#define M 200000#define LL long longusing namespace std;int n,m;int a[M+5];struct H{ int x; int l,r;}st[5*M];void build(int o,int l,int r){ st[o].l=l,st[o].r=r; if(l==r) { st[o].x=a[l]; return; } int mid=(l+r)/2; build((o<<1),l,mid); build((o<<1)|1,mid+1,r); st[o].x=st[(o<<1)].x+st[o<<1|1].x;}void pushdown(int o){ st[o<<1].x=0; st[o<<1|1].x=0;}void ex(int o,int ql,int qr){ int l=st[o].l,r=st[o].r; int mid=(l+r)/2; if(l==ql&&r==qr) { st[o].x=0; return; } if(!st[o].x) pushdown(o); if(qr<=mid) ex(o<<1,ql,qr); else if(ql>mid) ex(o<<1|1,ql,qr); else ex(o<<1,ql,mid),ex(o<<1|1,mid+1,qr); st[o].x=st[o<<1].x+st[o<<1|1].x;}int query(int o,int ql,int qr){ int l=st[o].l,r=st[o].r; int mid=(l+r)/2; if(ql==l&&qr==r) return st[o].x; if(!st[o].x) pushdown(o); int sum=0; if(ql<=mid) sum+=query(o<<1,ql,mid); if(qr>mid) sum+=query(o<<1|1,mid+1,qr); return sum;}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) a[i]=1; build(1,1,n); while(m--) { int L,R,ans; scanf("%d %d",&L,&R); ex(1,L,R); ans=query(1,1,n); printf("%d\n",ans); } return 0;}

转载于:https://www.cnblogs.com/dfsac/p/7587868.html

你可能感兴趣的文章
爬虫基础 pyquery 详解
查看>>
QT creator+OpenCV2.4.2+MinGW 在windows下开发环境配置
查看>>
Allegro PCB Design GXL (legacy) 设置十字大光标
查看>>
数据结构--图的定义和存储结构
查看>>
[C#参考]委托机制
查看>>
linux常用命令
查看>>
自然杂志上的影评
查看>>
MATLAB制作符合IEEE标准的图插入Latex
查看>>
#HTTP协议学习# (三)摘要认证
查看>>
SQL Server 存储过程
查看>>
Appium自动化测试1 - 安装部署
查看>>
广州.NET微软技术俱乐部微信群各位技术大牛的blog
查看>>
CCLayerColor 用法
查看>>
js访问iframe中的DOM.html
查看>>
redis使用
查看>>
端口复用和端口重映射
查看>>
iOS.AddFont
查看>>
GridView 事件_ZZ
查看>>
HDU1754I Hate It(线段树)
查看>>
IOS-WebViewJavascriptBridge使用说明
查看>>