Wannafly挑戰賽17D 01序列2

2022-02-05 05:49:58 字數 1184 閱讀 8629

傳送門

先考慮二進位制下為3倍數的數的共同特點自己手玩去,可以發現這些數奇數二進位制位上的1個數(記為\(a\))和偶數二進位制位上的1個數(記為\(b\))在模3意義下相等(\(a \equiv b (mod 3)\)),所以可以維護所有字首中,\(a\)為0/1/2以及\(b\)為0/1/2的字首個數,用線段樹維護每個區間的這些值.但是合併的時候,我們還需要知道前乙個區間的最後乙個字首的\(a,b\)狀態,所以把這個也維護起來.每次就單點修改,詢問就把某個區間的所有狀態的字首個數摳出來,然後分類討論一下(逃

**裡記錄狀態是\(a-b\)在模3意義下為0/1/2的字首個數,以及最後乙個字首的0/1/2狀態,這樣比較方便(霧)

(因為實在不知道怎麼寫,就看**吧

#include#define ll long long

#define il inline

#define re register

#define db double

#define eps (1e-5)

using namespace std;

const int n=500000+10;

il ll rd()

while(ch>='0'&&ch<='9')

return x*w;

}#define lc (o<<1)

#define rc ((o<<1)|1)

#define mid ((l+r)>>1)

struct node

}s[n<<2],nw;

il node ad(node a,node b)

void bui(int o,int l,int r)

bui(lc,l,mid),bui(rc,mid+1,r);

s[o]=ad(s[lc],s[rc]);

}void modif(int o,int l,int r,int lx)

if(lx<=mid) modif(lc,l,mid,lx);

else modif(rc,mid+1,r,lx);

s[o]=ad(s[lc],s[rc]);

}node quer(int o,int l,int r,int ll,int rr)

int n,m;

ll ans;

int main()

}return 0;

}

Wannafly挑戰賽6 D 鎖

時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 題目描述 106號房間共有n名居民,他們每人有乙個重要度。房間的門上可以裝若干把鎖。假設共有k把鎖,命名為1到k。每把鎖有一種對應的鑰匙,也用1到k表示。鑰匙可以複...

Wannafly挑戰賽16 D 打怪(DP)

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 有a種 b種屬性,和c種怪物。對於第k種怪物,給出 i和屬性j的搭配在乙個單位時間內對其造成的傷害h k,i,j。已知一開始使用 i,需要時間x i,使用屬性i,需...

Wannafly挑戰賽20 D挑選隊友

d 挑選隊友 進入討論 77 304 通過輸入包括兩行 第一行包括三個數n,m,k,表示共有n位選手,m個群,需要有k名選手被選擇 第二行包括m個數,第i個數表示第i個群有si個選手 n 100000,m k n 輸出包括一行 第一行輸出方案數 由於輸出可能比較大,你只需要輸出在模998244353...