SPOJ 3267 DQUERY(離線 樹狀陣列)

2022-03-01 16:17:46 字數 1212 閱讀 5470

傳送門

話說這好像hh的項鍊啊……

然後就說一說上次看到的一位大佬很厲害的辦法吧

對於所有$r$相等的詢問,需要統計有多少個不同的數,那麼對於同乙個數字,我們只需要關心它最右邊的那乙個

比如$1,2,3,4,1,2$,對於所有$r=5$的詢問,我們不用去管第乙個$1$因為它一定可以被第五個$1$代替

同理,對於所有$r=6$的詢問,我們也不需要去管第二個$2$

然後我們可以將所有詢問離線,按$r$公升序排序

每一次進行掃瞄,如果乙個數沒有出現過,就在樹狀陣列中加入,否則就將它上一次出現的位置的那乙個刪除,再將它加入

1

//minamoto

2 #include3 #include4 #include5

#define n 1000050

6#define rint register int

7using

namespace

std;

8struct

ab q[n];

11int

a[n],f[n],n,m,last[n],r;

12 inline int

read()

22 inline void print(int

x) 27

if(x<0) putchar('

-'),x=-x;

28int l=0,wt[30

];29

while(x) wt[++l]=x%10,x/=10;30

while(l) putchar(wt[l--]+48

);31

}32 inline void add(int x,int

y)36 inline int sum(int

k)42 inline bool

cmp(ab x,ab y)

45 inline bool

cmpp(ab x,ab y)

48int

main()

61 q[i].ans=sum(q[i].r)-sum(q[i].l-1

);62

}63 sort(q+1,q+1+m,cmpp);

64for(rint i=1;i<=m;i++)

65 print(q[i].ans),putchar(10

);66

return0;

67 }

3 26考試小記

昨晚做夢,夢到自己有了乙個關於字串的乙個不錯的idea,結果起床之後忘了 上來看到第一題,果然 被我昨天奶中了嗎?純數學式子題 恩,暴力分40分,很足。第二題好像是乙個dp啊,又奶中了嗎 表示只會32分狀壓。第三題計算幾何 好吧,這個故事告訴我們不能瞎立flag,第三題上來n 1000部分分,為啥我...

3 26做題筆記

昨晚的hh睡了很爽的一覺,今天神清氣爽啦 心情變好了 昨天經過一天對自己菜菜的現狀的思考,總結來說就是自己在基礎方面不是很好 特別是圖論方面,根本一竅不通 這就導致我只能做一些水題,數論題,二分題以及博弈問題。然而,這對於我來說是遠遠不夠的!於是hh就想到去洛谷鞏固一下自己的圖論以及演算法基本技巧的...

小結 普及模擬3 26

普及模擬 石子遊戲 普及模擬 公共子串 普及模擬 射擊 普及模擬 過河 60 100 0 50 210 還可以,就是第一題有點可惜,沒有想到那個詭異的優化.t1 簡單地說就是它說什麼,你打什麼.打錯了怪我嗦 開乙個棧,把顏色相同的壓在一起 這樣就可更加快速的進行 各種神奇的操作 t2 裸題裸得也太嚴...