poj 2886 線段樹 單點更新

2021-07-12 05:28:12 字數 699 閱讀 4524

題意:n個小孩圍成一圈,玩約瑟夫環,每個小孩有一張卡片上面是數字a,正數代表右手邊第a個小孩出隊,負數表示左手邊,遊戲從第k個小孩開始,遊戲直到所有小孩出隊為止,第p個出隊小孩得到f[p]分數,f[p]為p的因子數

題解:這裡引入反素數的概念不清楚可以看

每次詢問只要從第乙個出隊的執行到當前給出的n範圍內的最大反素數即可,然後和poj2828類似 線段樹tree記錄當前線段上有多少個人 然後主要就是數數的問題了 比較難理解

#include#includeusing namespace std;

#define lson l,mid,rt<<1

#define rson mid+1,r,rt<<1|1

const int n=500010;

int tree[n<<2];

const int antiprime=;//預處理反質數

const int factornum=;

struct child

c[n];

void build(int l,int r,int rt)

int update(int p,int l,int r,int rt)

int main()

printf("%s %d\n",c[pos].name,factornum[cnt]);

}return 0;

}

poj2886 線段樹單點更新)

到1號節點的距離為s的點,則該點的相對節點1的編號為 s n n 1,另外此題要打表求某個數的因子個數 反素數就是 對 x來說約束個數 g x 如果 對於 i includeusing namespace std const int maxn 500002 反素數及因子個數打表 int ap 40 ...

poj2886 線段樹單點修改 反素數(喵?)

n個熊孩子每個人有個數字a i 首先k號熊孩子出圈,然後第k a i 個熊孩子出圈,乙個環,可以繞很多圈,如果a i 為正則順時針數,反之逆時針,相當於乙個變體的約瑟夫遊戲,第i個出圈的熊孩子,有f i 的得分,f i 為i的因子個數 分為兩個部分 線段樹模擬約瑟夫遊戲 尋找1到n範圍內因數數量最多...

poj2886 約瑟夫環,樹狀陣列

n個人圍成圈,每個人手上有乙個數字,最開始k跳出圈,如果k手上的數num是正數,則向左num個人出圈,負數就向右,直到所有人都出圈,得分最高的是第 1 n中因子數最多的數 次跳出的人 首先處理1 n中因子最多的數,有個名詞叫反素數,不管他這裡直接打表 include include include ...