一眼思路的題…
就是比較難寫..
考慮乙個點必須小於其 ⌊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準時發...