数轴染色
来源:互联网 发布:matlab mac 2015b官方 编辑:程序博客网 时间:2024/05/17 00:04
http://codevs.cn/problem/1191/
这个数据范围是要nlogn的做法嘛。
线段树:一开始把数组全设为1,建一下树,然后修改的时候把白球全修改成0,每次用线段树求和就好了。
不过我确实调了一个上午啊。感谢sxb大神帮我找错
#include<iostream>#include<cstdio>#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;}
阅读全文
0 0
- 数轴染色
- 数轴染色
- Wikioi-1191-数轴染色
- wiki-1191数轴染色
- 【wikioi1191】 数轴染色
- wikioi1191 数轴染色
- codevs1191 数轴染色
- Codevs 数轴染色
- 【codevs1191】数轴染色
- 1191 数轴染色
- Codevs 1191 数轴染色
- 【codevs 1191】数轴染色
- [codevs1191]数轴染色
- Codevs 1191 数轴染色
- 1191 数轴染色
- Codevs 1191 数轴染色
- 【codevs 1191】数轴染色
- Codevs1191数轴染色
- 红帽 Red Hat Linux相关产品iso镜像下载【百度云】【更新6.9】
- Linux--系统yum安装软件(二)
- let、var、const的区别
- 大数据生态系统基础:Apache Kafka基础(二):最新kafka编程入门:Producer API
- 可视化基础
- 数轴染色
- 排序:冒泡与选择的改进
- python3.0网络编程
- 1144: n的合成
- libvmi安装_Ubuntu_14.04
- python学习之路-基础篇-函数-day03
- Python库之Requests(iMooc)---(3)
- Python读取txt内容写入xls格式的excel中
- UVA10003CuttingSticks