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行輸出每次詢問的結果,具體格式請參考樣例。
62 5 3 4 7 6
32 5 4
3 6 5
1 4 3
case #1:775
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 計算出...