就是區間不同值的個數。直接莫隊模板。
#include
using
namespace std;
typedef
long
long ll;
//由塊號尋找第乙個塊元素的下標
#define ll(x) ((x-1)*len+1)
const
int maxn=
1<<20;
struct node
q[maxn]
;int pos[maxn]
;ll ans[maxn]
;ll flag[maxn]
;//儲存當前區間字首和的個數
int a[maxn]
;bool
cmp(node a, node b)
//bool cmp(node a, node b)
////
// return pos[a.l]//}
int n, m, k, len;
int l=
1, r=0;
ll ans=0;
void
add(
int x)
}void
del(
int x)
}int
main()
scanf
("%d"
,&m)
;for
(int i=
1;i<=m;i++
)sort
(q+1
, q+
1+m, cmp)
; flag[0]
=1;//為了統計a[i]=k
for(
int i=
1;i<=m;i++
)while
(l>q[i]
.l)while
(r.r)while
(r>q[i]
.r) ans[q[i]
.k]=ans;
}for
(int i=
1;i<=m;i++
)return0;
}
洛谷P1972(莫隊演算法)
hh 有一串由各種漂亮的貝殼組成的項鍊。hh 相信不同的貝殼會帶來好運,所以每次散步完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh 不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題 某一段貝殼中,包含了多少種不同的貝殼?這個問題很難回答 因為項鍊實在是太長了。於...
P1972 SDOI2009 HH的項鍊(莫隊)
給你長度為n的一組數,每次詢問區間有多少個不同的數。n 100000 m 100000。聽說暴力能過,但是有點不科學,於是我打了乙個莫隊。莫隊思想就是把左區間分塊,然後暴力,這樣就可以優化到osqrt o include include include include include define ...
演算法5 7 區間檢索
間隔搜尋問題給出了一系列的範圍,而測試的時間間隔,尋找和測試間隔交叉間隔。為了解決問題,須要專門編寫乙個類,這個類的介面例如以下 public inte ce intervalst,value 每乙個節點中有兩個值。第乙個值是區間的起點和終點,第二個值是該節點以及子節點中最大的區間終點。為了簡化問題...