同樣的我們依舊進行離線並對詢問進行排序,以左端點所在塊為第一關鍵字,以右端點為第二關鍵字。(這樣可以減少大幅度移動次數)
我們以樣例為例:資料1
2343
5編號12
3456
塊號112
233提問:
1.[1,2]
2.[2,6]
3.[3,5]
那麼我們就要兩個移動下標f1,f2。其實位置為0,0
隨著問題的討論而不斷移動。具體為:f1,f2卡l和r,然後cnt[i]記錄第i個數出現了多少次,根據f1和f2的移動加減,對於每個詢問,就回答有多少個cnt不為零就可以啦。
q時間複雜度會不會很大?
a:不會很大,只有在塊移動後才會出現較大的移動,然而隨著塊的增大,塊的移動範圍會越來越小。所以不用擔心時間的問題
**:(這是在luogu上過不了的莫隊qwq)
#includeusing namespace std;
struct mapn
dian[200000+5];
int n,m,k;
bool cmp(mapn a,mapn b)
}void change_x(int &x,int y)
}int main()
for (int i=1;i<=m;i++)
printf("%d\n",ans[i]);
return 0;
}
HH的項鍊 莫隊
hh 有一串由各種漂亮的貝殼組成的項鍊。hh 相信不同的貝殼會帶來好運,所以每次散步完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh 不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題 某一段貝殼中,包含了多少種不同的貝殼?這個問題很難回答 因為項鍊實在是太長了。於...
HH的項鍊(莫隊演算法模版)
include include include include using namespace std int n,m,s int ans 999999 struct stp 999999 int f 999999 a 999999 int cmp const st a,const st b int...
SDOI2009 HH的項鍊 莫隊
hh有一串由各種漂亮的貝殼組成的項鍊。hh相信不同的貝殼會帶來好運,所以每次散步 完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題 某一段貝殼中,包含了多少種不同 的貝殼?這個問題很難回答。因為項鍊實在是太長了。於是...