标签:
5 4
1 1 3
2 2 5
1 2 4
2 3 5
1
2
记录号 S1306202 评测状态 Accepted 题目 P1473 校门外的树3 提交时间 2015-08-31 00:02:13 代码语言 C++ 消耗时间 589 ms 消耗内存 2024 KiB
#include<stdio.h> #include<string.h> int n,m; struct s { int l,r; }node[50050<<2]; void build(int l,int r,int tr) { node[tr].l=node[tr].r=0; if(l==r) return; int mid=(l+r)>>1; build(l,mid,tr<<1); build(mid+1,r,tr<<1|1); } void insertl(int L,int R,int l,int r,int tr) { if(L<=l&&r<=R) { node[tr].l++; return; } int mid=(l+r)>>1; if(L<=mid) insertl(L,R,l,mid,tr<<1); if(R>mid) insertl(L,R,mid+1,r,tr<<1|1); } void insertr(int L,int R,int l,int r,int tr) { if(L<=l&&r<=R) { node[tr].r++; return; } int mid=(l+r)>>1; if(L<=mid) insertr(L,R,l,mid,tr<<1); if(R>mid) insertr(L,R,mid+1,r,tr<<1|1); } int queryl(int pos,int l,int r,int tr) { if(l==r) return node[tr].l; int mid=(l+r)>>1; if(pos<=mid) { return node[tr].l+queryl(pos,l,mid,tr<<1); } else return node[tr].l+queryl(pos,mid+1,r,tr<<1|1); } int queryr(int pos,int l,int r,int tr) { if(l==r) return node[tr].r; int mid=(l+r)>>1; if(pos<=mid) { return node[tr].r+queryr(pos,l,mid,tr<<1); } else return node[tr].r+queryr(pos,mid+1,r,tr<<1|1); } int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { build(0,n,1); int num=0; while(m--) { int op,a,b; scanf("%d%d%d",&op,&a,&b); if(op==1) { insertl(0,a-1,0,n,1); insertr(b+1,n,0,n,1); num++; } else { a=queryr(a,0,n,1); b=queryl(b,0,n,1); printf("%d\n",num-a-b); } } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
TyvjOJ题目 P1473 校门外的树3(线段树区间染色种类数不覆盖)
标签:
原文地址:http://blog.csdn.net/yu_ch_sh/article/details/48116983