2019CCPC網路選拔賽補題

2021-09-26 10:48:25 字數 2754 閱讀 6305

hdu6703

題意就不說了,直接分析吧。

對於1操作,a[pos]+1e7,但是我們每次詢問是(1,n)範圍內的,這個操作顯然就是把這個點給刪了。

對於2操作,詢問[1,r]區間內》=k且不等於a[i] (1<=i<=r) 的最小的數。

題目做法如下:

對位置建權值線段樹,每個結點表示乙個區間,每個結點維護乙個區間的位置的最大值。

(這裡有些繞腦,如果看不懂的話需要畫圖便於理解。)

我們直接看詢問,格式是(r,k),線段樹是(l,r,rt,k,r),mx[rt]表示rt這個區間的最大位置

如果某乙個區間mx[rt]<=r,那麼就說明rt裡面的每乙個數都在[1,r]內,這個顯然不符合條件。

將這個剪枝加入query,就可以過這個題目了

#include

#define sc(n) scanf("%d",&n)

#define pt(n) printf("%d\n",n)

#define rep(i,a,b) for(int i=a;i<=b;i++)

#define vi vector

#define vl vector

#define pb push_back

#define inf 0x3f3f3f3f

using

namespace std;

const

int maxn =

1e5+7;

int n,m;

int a[maxn]

,aid[maxn]

,mx[maxn<<2]

;void

pushup

(int rt)

void

build

(int l,

int r,

int rt)

int mid =

(l+r)/2

;build

(l,mid,rt<<1)

;build

(mid+

1,r,rt<<1|

1);pushup

(rt);}

void

update

(int l,

int r,

int rt,

int x)

int mid =

(l+r)/2

;if(x<=mid)

update

(l,mid,rt<<

1,x)

;else

update

(mid+

1,r,rt<<1|

1,x)

;pushup

(rt);}

intquery

(int l,

int r,

int rt,

int r,

int k)

intmain()

aid[n+1]

= n+1;

build(1

,n+1,1

);int lans =0;

for(

int i=

0;i)else}}

return0;

}

(一句話總結:比賽時這個題目思路不清晰,權值線段樹怎麼維護一直沒想明白,而且死扣這個題,浪費了太多時間。)

hdu6705

題意很簡單,不贅述。

先把每個點的出度按權值從小到大排個序。

把詢問離線。

然後先把所有的邊加進優先佇列(起點,第幾條邊,權值)。

每次擴充套件可以從當前點取下一條邊,和從當前的點取下乙個最小的出邊。

(這裡說的不是很清楚,具體看**第61到63行)

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

1e5+7;

struct edge};

vector g[maxn]

;struct node};

int n,m,k,qy[maxn]

;ll ans[maxn]

;int

main()

);}int mx =0;

for(

int i=

1;i<=k;i++

)for

(int i=

1;i<=n;i++

)sort

(g[i]

.begin()

,g[i]

.end()

);priority_queue q;

for(

int i=

1;i<=n;i++))

;}int tot =0;

while

(true))

;int v = g[s]

[id]

.to;

if(g[v]

.size()

) q.

push()

;}for(

int i=

1;i<=k;i++

)printf

("%lld\n"

,ans[qy[i]])

;}return0;

}

(一句話總結:比賽時看到第k大就往可持久化線段樹上想,導致根本無從下手,其實只要離線了,用優先佇列可以很簡單的維護,而且在cf上做過不少這種題目,思路竟然還是不到位,實在不應該)

2019CCPC網路選拔賽簽到題題解

因為實力不濟,沒能通過網路賽拿到晉級的名額,心情沉重,故作此文記錄本次網路賽的點滴收穫。其中包含1001 1006 shuffle card 1007 windows of ccpc 1008 fishing master的題解。題目傳送門 題目分析 要找到使 ax orc a xor c axor...

2019 CCPC 網路選拔 array

給乙個 1 到 n 的排列 現在有 m 個操作,每個操作是下面的一種 t leq 10,1 leq n leq 10 5,1 leq m leq 10 5 1 leq k leq n 考場上頭鐵,硬肝了 4h 結考後 20 分鐘調出來,1a.但想出來還是很高興的 我們會發現每次給出的 k 都在 1,...

2019ccpc哈爾濱補題

因為每個字串只能取乙個,剛開始是覺得全部列舉也不會超,後來想想列舉也要用深搜,所以就先記錄擁有各個字元的串,然後深搜 include using namespace std const int maxn 2e6 10 int t char s maxn vector int v 10 bool vi...