CODE VS 1191 數軸染色

2021-08-18 19:18:42 字數 1951 閱讀 4879

題目描述

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 輸...