nefu 1328 區間求和 主席樹 離線處理

2021-08-15 07:02:43 字數 1234 閱讀 4427

problem:1328

time limit:2000ms

memory limit:165535k

有乙個序列包含n個正整數,現在有m次詢問,每次詢問為:求(l,r)的區間中小於等於k的數的和?

輸入包含多組資料。每組資料,第一行為n,表示這個整數序列長為n(1<=n<=1e5)。第二行輸入整數序列x1,x2,……,xn(1<=xi<=1e9)。第三行輸入m(1<=m<=1e5)。接下來m行,每行輸入l,r,k(1<=l<=r<=n,0<=k<=1e9)。

每組資料首先輸出「case #x:」,x從1開始,然後m行輸出每次詢問的結果,具體格式請參考樣例。

6

2 5 3 4 7 6

32 5 4

3 6 5

1 4 3

case #1:77

5

cjj

題意:

中文題。

思路:一開始想這道題,想到了莫隊。然後到後來調莫隊的時候發現要想調對,幾乎就是暴力了。果斷棄題,根本沒有往主席樹上想。qaq

如果是用主席樹寫的話,因為k在查詢是未知的,無法確定小於等於k的值都在哪一棵樹上,所以需要離線處理。我們把需要插入的數和詢問的區間和k值都記錄下來,並按照從小到大排序。如果遇到了數,我們就插入這個值,如果遇到了詢問,我們就訪問最近的那棵樹,訪問l到r區間。最後按照詢問的順序輸出就行了。

**:

#include #include #include #include using namespace std;

const int maxn=1e5+10;

struct data

q[2*maxn];

bool cmp(data a,data b)

int main()

scanf("%d",&m);

for(int i=n+1;i<=n+m;i++)

sort(q+1,q+1+m+n,cmp);

root[0]=build(1,n);

int num=0;

for(int i=1;i<=n+m;i++)

else

}printf("case #%d:\n",cas++);

for(int i=1;i<=m;i++)

}return 0;

}

POJ 1328 區間貪心,幾何

題目大意 以x軸為分界,y 0部分為海,y 0部分為陸地,給出一些島嶼座標 在海中 再給出雷達可達到範圍,雷達只可以安在陸地上,問最少多少雷達可以覆蓋所以島嶼。include include include includeusing namespace std int n,m struct node...

hdu1968 區間更新 區間求和(線段樹)

這次是把某個區間全部更新為乙個值,而不是增加或減少。最後詢問一下區間總和。思路還是差不多的。在更新時,當我們將乙個節點所維護的區間更新後,可以用這個區間的長度 新的值,即 tree x sum tree x r tree x l 1 tree x data。在查詢或更新區間時,可以將tree x d...

poj1328 區間貪心 《挑戰程式設計競賽》

2018 1 31 其實就是貪心,每次將所選的點盡可能的向右,那麼我們所需的就會盡可能的少了。include include include define min 1e 5 using namespace std const int n 1000 struct zbs n 1 int n,r 計算出...