安徽省2016「京勝杯」程式設計大賽 G 木條染色

2021-07-23 06:07:46 字數 2245 閱讀 8124

time limit: 1000 ms

memory limit: 65536 kb

total submissions: 134

accepted: 20

小明是乙個非常浪漫的畫家,他喜歡畫各種奇奇怪怪的畫,雖然沒人理解他畫的究竟是什麼東西。

有一天,他突發奇想,對於一根木條,他每次從木條中選取乙個區間[l,r]進行染色,經過多次染色後,他想知道在[a,b]區間中有幾個未被染色的子區間?

可惜小明雖然畫畫非常厲害,但是並不擅長解決這類問題,於是,他拿著這根木條來找你,希望你能夠給他幫助。

假設木條無限長,所有查詢都在木條長度範圍內,未被染色的子區間是指,木條上染過色的區間的間斷部分。

第一行乙個整數t,代表資料組數。

對於每組資料,第一行給出兩個整數n,q,分別代表染色的區間個數,以及查詢個數。

之後n行,每行兩個整數l,r,表示將l到r的區間進行染色,包含l,r兩個節點。

之後q行,每行兩個整數a,b,表示詢問a到b總共有多少未被染色的子區間。

兩組資料之間用乙個空行隔開。

t<20

n<10000

q<100000

0<=l0<=a<=b<1000000

對於每次詢問,輸出乙個整數,表示查詢結果。

每組資料之後,請輸出乙個空行。

2 2 3

1 2

3 4

1 3

3 4

5 5

3 3

1 5

2 8

5 6

0 5

0 9

9 9 1

0 1

1 2

1 對於第一組資料,[0,1),(2,3),(4,+)是未染色的子區間,因此查詢[1,3]可以找到(2,3)這個子區間,而對於[3,4]不能找到,對於[5,5]可以找到[5,5]。

對於第二組資料,[0,1)和(8,+)是未染色的子區間,因此對於[0,5]只有子區間[0,1),對於查詢[0,9],有子區間[0,1)和(8,9],對於查詢[9,9],有[9,9]這個子區間。

//這道題還木有做出來,正在努力a中,歡迎各位朋友給出解題思路

2017-4-29 19:02:19----補下這道題的題解,這道題用的是線段是+離散化,**參考如下

#include#include#includeusing namespace std;

#define lson i<<1

#define rson (i<<1)+1

int maxn,t,n,m;

int va[500000];

int ha[1000005],pre,pre2;

struct nodeb[100005];

int a[100005];

void build(int i,int l,int r)

inline void pushup(int i)

inline void pushdown(int i)

void update(int i,int l,int r,int l,int r)

if(va[i]!=-1)pushdown(i);

if(r<=(l+r)/2)update(lson,l,(l+r)/2,l,r);

else if(l>=(l+r)/2+1)update(rson,(l+r)/2+1,r,l,r);

else

pushup(i);

}int query(int i,int l,int r,int l,int r)

if(r<=(l+r)/2)return query(lson,l,(l+r)/2,l,r);

else if(l>=(l+r)/2+1)return query(rson,(l+r)/2+1,r,l,r);

else return query(lson,l,(l+r)/2,l,(l+r)/2) + query(rson,(l+r)/2+1,r,(l+r)/2+1,r);

}inline void init()

pre2 = 1;

for(int i=max(a[0]-1,0);i<=a[2*n-1]+2;i++)

if(ha[i])

else ha[i] = pre2;

}int main()

{ scanf("%d",&t);

while(t--)

{scanf("%d%d",&n,&m);

for(int i=0;i

安徽省2016「京勝杯」程式設計大賽 A 砝碼稱重

time limit 1000 ms memory limit 65536 kb total submissions 61 accepted 37 小明非常喜愛物理,有一天,他對物理實驗室中常用的彈簧拉力計產生了興趣。實驗室中有兩種質量不同的砝碼,小明分別用a個第一種砝碼放在彈簧拉力計上和b個第二種...

安徽省2016「京勝杯」程式設計大賽 E 轉啊轉

time limit 1000 ms memory limit 65536 kb total submissions 59 accepted 15 在二維平面上,有乙個固定的圓和乙個固定的點 保證該點不在圓上 還有乙個動點在圓上以角速度w繞圓心一直轉。在t時刻,連線該動點與定點成一條直線k,求直線k...

安徽省2016「京勝杯」程式設計大賽 E 轉啊轉

time limit 1000 ms memory limit 65536 kb total submissions 59 accepted 15 在二維平面上,有乙個固定的圓和乙個固定的點 保證該點不在圓上 還有乙個動點在圓上以角速度w繞圓心一直轉。在t時刻,連線該動點與定點成一條直線k,求直線k...