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 不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題 某一段貝殼中,包含了多少種不同的貝殼?這個問題很難回答 因為項鍊實在是太長了。於...