NYOJ 600 花兒朵朵 樹狀陣列

2021-06-13 22:13:42 字數 1386 閱讀 8311

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:5 描述

春天到了,花兒朵朵盛開,hrdv是一座大花園的主人,在他的花園裡種著許多種鮮花,每當這個時候,就會有一大群遊客來他的花園欣賞漂亮的花朵,遊客們總是會詢問,某個時間有多少種花兒同時在盛開著?hrdv雖然知道每種花兒的開花時間段,但是他不能很快的答出遊客的問題,你能編寫乙個程式幫助他嗎?

輸入第一行有個整數t,表示有t組測試資料,每組測試資料第一行為兩個整數n,m(0輸出

對於每次遊客的詢問,輸出乙個整數在單獨的一行,表示這個時間盛開的花有多少種。

樣例輸入

2

1 15 10

42 3

1 44 814

6

樣例輸出

012

1

和「士兵殺敵二」相像,

但是資料範圍太大了,不能直接開陣列,用離散化,或者雜湊

資料有點水,我直接取餘就水過了

#include #include #include //樹狀陣列模板————插入區間求單點

#include #include #include #include #include #include #define flag 0

#define m 999983//乙個很大的素數,因為我陣列取的是100萬,所以取了100萬以下的最大素數

using namespace std;//這裡可能存在問題,就是沒有去重,如果取餘之後有重複,這樣就不行了

//我想是這一題的資料出的太水了,所以蒙混過關了

int c[1000005];//全域性變數陣列c 用lowbit函式建立成樹狀陣列

int lowbit(int x)//重要建樹、查詢、連線函式

void add(int x,int d)//區間修改,如果給定阿健a——b上各加d ,

}int get(int x) //獲取單點的值(查詢)

return sum;

}int main()

s;s mm[maxn];

bool cmp(s a, s b)

return res;

}int main()

sort(mm+1,mm+n+1,cmp);

int x=0;

for(int i=1;i<=n;i++) //離散化+去重

for(int i=1;i<=2*n;i+=2) //插線

for(int i=2*n+1;i<=n;i++) //問點

printf("%d\n",sum(real[i]));

}return 0;

}

nyoj 600 花兒朵朵

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述春天到了,花兒朵朵盛開,hrdv是一座大花園的主人,在他的花園裡種著許多種鮮花,每當這個時候,就會有一大群遊客來他的花園欣賞漂亮的花朵,遊客們總是會詢問,某個時間有多少種花兒同時在盛開著?hrdv雖然知道每種花兒的開花時間段,但是...

nyist 600 花兒朵朵

題目 給定很多花的開花時間段,詢問某一時間點有多少朵花兒開放。分析 線段樹 離散化。利通每朵花的開花時間段的端點值將時間軸分割成區間段,則操作以每個區間段為整體進行。分割又兩種方案 1.端點各成一段,端點間各成一段 2.建立左閉右開的區間,每個區間從上乙個頂點開始 到下乙個頂點之前結束 開區間 本題...

NYOJ 士兵殺敵 (樹狀陣列)

首先看一道題 描述南將軍手下有n個士兵,分別編號1到n,這些士兵的殺敵數都是已知的。小工是南將軍手下的軍師,南將軍經常想知道第m號到第n號士兵的總殺敵數,請你幫助小工來回答南將軍吧。南將軍的某次詢問之後士兵i可能又殺敵q人,之後南將軍再詢問的時候,需要考慮到新增的殺敵數。輸入 只有一組測試資料 第一...