SPOJ DQUERY 區間種類查詢

2021-09-26 18:10:58 字數 803 閱讀 1518

離線做法:

列舉右端點r,右端點固定時,記錄最右邊第一次出現的數字為1,比如1 2 1 2 3,0 0 1 1 1 .給定l,那麼l-r區間數字種類的結果是:sum[r]-sum[l-1].

把詢問按r從小到大排序,我們r+1時,維護的陣列只改變r+1為1,和r+1的數之前出現的位置變為0即可。

//kx

#include using namespace std;

typedef long long ll;

typedef double db;

//unordered_mapmp;

const int m= 1e5+7;

int a[m];

int root[m*26],st[m*26];

int ls[m*26],rs[m*26];

int cnt;

void up(int pre,int &o,int l,int r,int x,int d)

int qu(int o,int l,int r,int x)

int m=(l+r)/2;

if(x<=m)return qu(ls[o],l,m,x)+qu(rs[o],m+1,r,x);

else return qu(rs[o],m+1,r,x);

}mapmp;

int main()

else

mp[a[i]]=i;

} scanf("%d",&q);

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

} return 0;

}

(線段樹統計區間種類)

第14屆中北大學程式設計競賽來了,集訓隊新買了一大堆氣球,氣球一共有k種顏色 1 k 256 氣球的顏色從1 k編號。zbt童心未泯,他發明了一種擺放氣球的遊戲,規則如下。一排有n個桌子,每張桌子上只有乙個氣球插孔,即每張桌子最多只能放乙個氣球。編號分別為1 n 1 n 100000 每張桌子一開始...

SPOJ DQUERY 區間數字統計

鏈結 我是鏈結,點我呀 題意 題意 題解 因為區間的端點移動乙個單位的話,只會涉及到乙個元素的增多或減少。因此可以用莫隊演算法來解決。只需要開乙個陣列 大小1百萬 用下標來快速檢索元素的個數即可。include define ll long long using namespace std stru...

SPOJ DQUERY 線段樹查詢區間不同值

題意 給定乙個序列,和許多區間,查詢不同區間內不同數的個數。include include include include using namespace std const int maxn 30005 const int maxq 2e5 5 struct nnode maxq bool cmp...