2472 九省聯考 2018 IIIDX

2021-08-18 19:37:11 字數 1781 閱讀 5459

一眼思路的題…

就是比較難寫..

考慮乙個點必須小於其 ⌊i

dk⌋ ⌊id

k⌋

那麼容易想出乙個樹形結構,每個點都大於其父親.

那麼對於乙個點,那麼他能選取的最大值就是當前能選的所有點中的n−

size

[id]

n −s

ize[

id

]這個點的值。

然後留夠其兒子的位置即可。

最後如果有相同的點,容易想到把當前點放在權值相同的最前面處

c++**如下:

#include

#define lowbit(x) (x & - x)

#define rep(i,x,y) for(register int i = x ; i <= y; ++ i)

#define repd(i,x,y) for(register int i = x ; i >= y; -- i)

using namespace std;

typedef

long

long ll;

inline

char gc()

return *s++;

}templateinline

void read(t&x)

while(!isdigit(c));

do while(isdigit(c));

x *= sign;

}const

int n = 1e6 + 500;

double k; int n,d[n],f[n],size[n];

int head[n],nxt[n << 1],to[n << 1],tot;

inline

void add(int x,int y)

struct seg

inline

void put_down(int

id)

int m;

int query(int

id,int l,int r,int w)

else

}void update(int

id,int l,int r,int l,int r,int w)

int mid = l + r >> 1;

put_down(id);

if(l > mid)update(id

<<1|1,mid+1,r,l,r,w);

else

if(r <= mid)update(id

<<1,l,mid,l,r,w);

else update(id

<<1,l,mid,l,mid,w) , update(id

<<1|1,mid+1,r,mid+1,r,w);

mx[id] = max(mx[id

<<1],mx[id

<<1|1]);

mi[id] = max(mi[id

<<1],mi[id

<<1|1]);

}void modify(int

id,int l,int r,int pos,int w)

}seg;

void dfs(int x)

}int ans[n],p[n],id[n];

int get_fa(int x)

bool vis[n];

int main()

rep(i,1,n) printf("%d ",d[ans[i]]);

return

0;}

九省聯考 2018

發現狀態數很少,直接搜即可。不難發現這個偏序關係形成了一棵樹。本來以為直接貪心即可,即把 a 排序,然後 dfs bfs 一遍直接安排權值,類似於這樣 void dfs1 int u void dfs2 int u 不出我所料,這份簡單的 沒有過,被這組資料叉掉了 2 2.0 1 1 1 2發現這樣...

九省聯考2018遊記

day0 上午到學校,去tututu寢室,入坑荒野求生,真tm好玩 雖然只打了一把 下午坐高鐵去sh,發現sh非正式選手只有hez的。day1 開局看t1,沒意識到狀態數是個組合數,於是寫了個程式算狀態數,還寫掛了 include int n 10,m 10,f 15 15 i,j,k int ma...

2018九省聯考墊底記

果然滾粗了,gg。考場在南理工,提前2個小時就到了。拿了hlt的電腦打 lct 然後1a,感覺自己棒棒的。看到一堆人在奶tjw,感覺那些人都太神了。沒有試機題,看到一堆神犇。最大流寫掛了,回家才調對。和cr互奶。自信200分很輕鬆 早上到考場看座位號,居然和陳神和喬神乙個考場 orz 8 00準時發...