SDOI2009 HH的項鍊 樹狀陣列

2022-05-16 02:07:40 字數 1026 閱讀 2816

1972 [sdoi2009]hh的項鍊

一段區間包含了多少種不同的數字

emmmm有很多種做法 莫隊 主席樹 線段樹....我覺得這題還挺好的

我比較弱就用的樹狀陣列 得離線

關鍵點是要將右端點r作為關鍵字 若前面出現過 就將其消掉 轉移到當前

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

這一坨把它比比划划就能明白了 盡量將其往後挪 因為是離線(語無倫次)

#include#include

#include

#include

#include

using

namespace

std;

#define max(x,y) (x)>(y)?(x):(y)

#define min(x,y) (x)>(y)?(y):(x)

#define ll long long

#define rg register

const

int n=500000+5,m=200000+5,inf=0x3f3f3f3f,p=99999997

;int n,m,tree[n<<2],a[n<<1],in[n<<1],ans[n<<1

];template

void rd(t &x)

int lowbit(int x)

void update(int pos,int

ad)int query(int

pos)

struct nodeask[n];

bool cmp(node a,node b)

intmain()

ans[ask[i].pos]=query(ask[i].r)-query(ask[i].l-1

); nxt=ask[i].r+1

; }

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

%d\n

",ans[i]);

return0;

}

SDOI2009 HH的項鍊 題解

題意 給乙個序列,長度為n,再給m個詢問,對每個詢問,輸出這個區間內有多少個不同的數。其實只需要把最後乙個出現的數統計一下就可以了,因為只有最後乙個出現的那個數才是有價值的,之前重複的數可以忽略,由此,演算法的框架就出來了,只需要有cdq的思想把查詢以區間的右端點為關鍵字排序,從前到後,同時用新出現...

SDOI2009 HH的項鍊 莫隊

hh有一串由各種漂亮的貝殼組成的項鍊。hh相信不同的貝殼會帶來好運,所以每次散步 完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題 某一段貝殼中,包含了多少種不同 的貝殼?這個問題很難回答。因為項鍊實在是太長了。於是...

SDOI2009 HH的項鍊 線段樹

hh 有一串由各種漂亮的貝殼組成的項鍊。hh 相信不同的貝殼會帶來好運,所以每次散步完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh 不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題 某一段貝殼中,包含了多少種不同的貝殼?這個問題很難回答 因為項鍊實在是太長了。於...