洛谷 P2184 貪婪大陸 解題報告

2022-04-30 05:21:09 字數 2131 閱讀 7616

面對螞蟻們的瘋狂進攻,小\(ff\)的\(tower\)

\(defence\)宣告失敗……人類被螞蟻們逼到了\(greed\)

\(island\)上的乙個海灣。現在,小\(ff\)的後方是一望無際的大海, 前方是變異了的超級螞蟻。 小\(ff\)還有大好前程,他可不想命喪於此, 於是他派遣手下最後一批改造\(scv\)布置地雷以阻擋螞蟻們的進攻。

小\(ff\)最後一道防線是一條長度為\(n\)的戰壕, 小\(ff\)擁有無數多種地雷,而scv每次可以在\([l,r]\)區間埋放同一種不同於之前已經埋放的地雷。 由於情況已經十萬火急,小\(ff\)在某些時候可能會詢問你在\([l',r']\)區間內有多少種不同的地雷, 他希望你能盡快的給予答覆。

第一行為兩個整數\(n\)和\(m\); \(n\)表示防線長度,\(m\)表示\(scv\)布雷次數及小\(ff\)詢問的次數總和。

接下來有\(m\)行, 每行三個整數\(q\),\(l\),\(r\); 若\(q\)=1則表示\(scv\)在\([l,r]\)這段區間布上一種地雷, 若\(q=2\)則表示小\(ff\)詢問當前\([l,r]\)區間總共有多少種地雷。

對於小ff的每次詢問,輸出乙個答案(單獨一行),表示當前區間地雷總數。

對於30%的資料: \(0<=n, m<=1000\);

對於100%的資料:\(0<=n, m<=10^5\).

說兩個方法吧

方法一:維護區間和合併區間時多加上的一部分,基於容斥原理,是這位大佬想到的

具體的:

我們維護\(sum\)代表這個區間的種類數,每次區間修改操作即為對二進位製所劃分的每個區間+1(不是對每個值,是對區間),防止退化我們用乙個\(lazy1\)維護

這時候在區間合併的時候就會產生問題,會重複統計。

我們再維護乙個值\(mer\)代表這個二進位制區間被多少次劃分時分開了,則統計答案時即為\(sum[ls]+sum[rs]-mer[ls]\)

這個也是區間操作,同樣用乙個\(lazy2\)來維護

code:

#include #define ls id<<1

#define rs id<<1|1

const int n=100010;

int sum[n<<2],mer[n<<2],lazy1[n<<2],lazy2[n<<2],n,m;

void push_down(int id,int l,int r)

lazy1[id]=lazy2[id]=0;

}void change(int id,int l,int r,int l,int r)

int mid=l+r>>1;

if(r<=mid)

change(ls,l,r,l,mid);

else if(l>mid)

change(rs,l,r,mid+1,r);

else

push_down(id,l,r);

sum[id]=sum[ls]+sum[rs]-mer[ls];

}int query(int id,int l,int r,int l,int r)

int main()

return 0;

}

方法二:維護區間兩端進行統計

我們發現,對於乙個區間\(1\)~\(i\),\(i\)及其左邊的區間的左端點的數量即為答案

對於乙個區間\(i\)~\(n\),\(i\)左邊的右端點不是它的答案

綜合一下,對於乙個區間\(l\)

$r$,$r$及左邊的左端點數量-$l$左邊的右端點數量,不就是$l$

\(r\)所覆蓋的區間數量了嗎?

單點修改,我們只需要用兩個樹狀陣列維護就行了

code:

#include const int n=100010;

int s[2][n],n,m;

int query(int typ,int x)

return sum;

}void add(int typ,int x)

}int main()

return 0;

}

2018.7.12

貪婪大陸(洛谷P2184)

題目背景 面對螞蟻們的瘋狂進攻,小ff的tower defence宣告失敗 人類被螞蟻們逼到了greed island上的乙個海灣。現在,小ff的後方是一望無際的大海,前方是變異了的超級螞蟻。小ff還有大好前程,他可不想命喪於此,於是他派遣手下最後一批改造scv布置地雷以阻擋螞蟻們的進攻。題目描述 ...

洛谷P2184 貪婪大陸

題目鏈結 面對螞蟻們的瘋狂進攻,小ff的tower defence宣告失敗 人類被螞蟻們逼到了greed island上的乙個海灣。現在,小ff的後方是一望無際的大海,前方是變異了的超級螞蟻。小ff還有大好前程,他可不想命喪於此,於是他派遣手下最後一批改造scv布置地雷以阻擋螞蟻們的進攻。小ff最後...

洛谷 P2184 貪婪大陸

題面 又是一模擬較套路的題呢?假如我們的地雷都表示成 l i r i 要求 l,r 那麼就相當於要求滿足 l i r r i l 的i的個數。直接求不太好求,看起來又不太能容斥?別忘了 l i r i l r 是隱藏條件,於是我們可以得出 滿足 l i r r i l 的i的個數 就是 l i r ...