題目描述
description
在一條數軸上有
n個點,分別是1~
n。一開始所有的點都被染成黑色。接著
我們進行
m次操作,第
i次操作將
[li,ri]
這些點染成白色。請輸出每個操作執行後
剩餘黑色點的個數。
輸入描述
input description
輸入一行為n和
m。下面
m行每行兩個數li、
ri輸出描述
output description輸出m
行,為每次操作後剩餘黑色點的個數。
樣例輸入
sample input
10 3
3 35 7
2 8樣例輸出
sample output96
3資料範圍及提示
data size & hint
資料限制
對30%
的資料有
1<=n<=2000,1<=m<=2000
對100%
資料有1<=li<=ri<=n<=200000,1<=m<=200000
解題思路:
這道題目第一想到的便是線段樹,將線段樹稍稍變形即可完成此題。
當然,這道題目也可以用並查集來做,效率比線段樹稍慢,但記憶體要小的多。
**:(請不要直接拷貝哦)
//並查集
#include int n,m,x,y,fa[200005];
using namespace std;
inline int read()
while ((ch<'0')||(ch>'9')) ch=getchar();
while ((ch>='0')&&(ch<='9'))
return f*x;
}inline int find(int x)
int main()
printf("%d\n",n);
} return 0;
}
//線段樹
#include int n,m,x,y;
using namespace std;
struct treetree[800005];
inline int read()
while ((ch<'0')||(ch>'9')) ch=getchar();
while ((ch>='0')&&(ch<='9'))
return f*x;
} inline void build(int root,int l,int r)
build(root*2,l,(l+r)/2);
build(root*2+1,(l+r)/2+1,r);
tree[root].sum=tree[root*2].sum+tree[root*2+1].sum;
} inline void change(int root,int l,int r)
int ll=tree[root].l,rr=tree[root].r;
int mid=(ll+rr)/2;
if ((ll==l)&&(rr==r))
if (l>mid) change(root*2+1,l,r); else
if (r<=mid) change(root*2,l,r); else
tree[root].sum=tree[root*2].sum+tree[root*2+1].sum;
}int main()
return 0;
}
codevs1191 數軸染色
題目描述 description 在一條數軸上有n個點,分別是1 n。一開始所有的點都被染成黑色。接著 我們進行m次操作,第i次操作將 li,ri 這些點染成白色。請輸出每個操作執行後 剩餘黑色點的個數。輸入描述 input description 輸入一行為n和m。下面m行每行兩個數li ri 輸...
codevs 1191 數軸染色
1191 數軸染色 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解檢視執行結果 題目描述 description 在一條數軸上有n個點,分別是1 n。一開始所有的點都被染成黑色。接著 我們進行m次操作,第i次操作將 li,ri 這些點染成白色。請輸出每個操作執行後 剩餘黑色...
codevs 1191 數軸染色
題目描述 description 在一條數軸上有n個點,分別是1 n。一開始所有的點都被染成黑色。接著 我們進行m次操作,第i次操作將 li,ri 這些點染成白色。請輸出每個操作執行後 剩餘黑色點的個數。輸入描述 input description 輸入一行為n和m。下面m行每行兩個數li ri 輸...