luogu3621 城池攻占 倍增

2022-04-29 21:18:08 字數 2252 閱讀 4580

好像所有人都寫的左偏樹 但我不會啊233

首先發現乘的時候 係數不會為負,所以能得到乙個關鍵條件:變化後的戰鬥力隨變化前的戰鬥力大小單調

所以我們考慮倍增

設hp[x][i]是從x開始一路攻克$2^i$個城池所需要最小的初始生命值

設trans[x][i][0/1]是攻克了$2^i$個城池後攻擊力的變化量,0表示乘,1表示加,先乘後加

然後就可以倍增了

1 #include2

#define pa pair3

#define clr(a,x) memset(a,x,sizeof(a))

4#define mp make_pair

5using

namespace

std;

6 typedef long

long

ll;7

const

int maxn=3e5+5;8

9 inline char

gc()

14inline ll rd()

17while(c>='

0'&&c<='

9') x=(x<<1)+(x<<3)+c-'

0',c=gc();

18return neg?(~x+1

):x;19}

2021

int n,m,fa[maxn][21

];22 ll hp[maxn][21],trans[maxn][21][2

];23

intans1[maxn],ans2[maxn];

2425

intmain()42}

43for(i=1;i<=m;i++)51}

52if(x!=-1) ans1[x]++;

53 ans2[i]=n;54}

55for(i=1;i<=n;i++)

56 printf("

%d\n

",ans1[i]);

57for(i=1;i<=m;i++)

58 printf("

%d\n

",ans2[i]);

5960

return0;

61 }

好好分析空間啊kora!

然而空間大小惡意卡倍增

但是我們這個倍增可以換成三進製的2333

就是把定義裡的$2^i$都換成$3^i$

於是$log_3300000=10$,空間就變成了原來的一半

需要注意的一點是,最後在跳倍增的時候,同乙個長度可以跳兩次(因為是三進製嘛),迴圈的時候稍微注意一下

1 #include2

#define pa pair3

#define clr(a,x) memset(a,x,sizeof(a))

4#define mp make_pair

5using

namespace

std;

6 typedef long

long

ll;7

const

int maxn=3e5+5;8

9 inline char

gc()

14inline ll rd()

17while(c>='

0'&&c<='

9') x=(x<<1)+(x<<3)+c-'

0',c=gc();

18return neg?(~x+1

):x;19}

2021

int n,m,fa[maxn][11

];22 ll hp[maxn][11],trans[maxn][11][2

];23

intans1[maxn],ans2[maxn];

24int pw3[11

];25

26int

main()49}

50for(i=1;i<=m;i++)58}

59if(x!=-1) ans1[x]++;

60 ans2[i]=n;61}

62for(i=1;i<=n;i++)

63 printf("

%d\n

",ans1[i]);

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

65 printf("

%d\n

",ans2[i]);

6667

return0;

68 }

(36 2)多重繼承之虛基類

class 派生類名 virtual 訪問標號 虛基類名,include using namespace std class a 宣告為基類a void fun private int nv 私有成員 class b1 virtual public a 宣告a為虛基類,派生出b1 private i...

openfire3 6 2整合現有系統使用者

openfire3.6.2整合現有系統使用者 前面寫過一篇openfire整合自己使用者的文章,最近抽空,又開了一下新版本的openfire的功能增強 把原有系統進行了一下增強。整合使用者的配置的地方發生了改變 3.5是在openfire。xml檔案中新增配置。3.6 是在資料庫的ofpropert...

3 6 2儲存某列最大值的行

任務 查詢最昂貴商品的數量,經銷商和 這可以通過子查詢輕鬆完成 from shop where price select max price from shop article dealer price 0004 d 19.95 其他解決方案是使用left join或排序按 降序的所有行,並使用特定...