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

2022-08-15 06:45:14 字數 888 閱讀 1055

n個熊孩子每個人有個數字a[i],首先k號熊孩子出圈,然後第k+a[i]個熊孩子出圈,乙個環,可以繞很多圈,如果a[i]為正則順時針數,反之逆時針,相當於乙個變體的約瑟夫遊戲,第i個出圈的熊孩子,有f[i]的得分,f[i]為i的因子個數

分為兩個部分:線段樹模擬約瑟夫遊戲+尋找1到n範圍內因數數量最多的那個ans,約瑟夫遊戲只要做到第ans個人出圈就好了

區間和的線段樹,每個葉子節點為1,代表乙個熊孩子,出圈置為0,

似乎搜到的題解都是打表來解決的因數個數問題,

#include 

#include

#include

#include

using namespace std;

typedef long long ll;

const int n = 1e7 + 7;

const ll inf = ~0ll;

const int prime[16] = ;

struct child

}arr[n];

ll maxnum, anspos, n;

void dfs(int dep, ll tmp, int num)

if (num == maxnum && anspos > tmp) anspos = tmp;

for (int i = 1; i < 63; i++)

}struct segmenttree

inline int update(int

pos, int rt)

} t;

int main()

printf("%s

%lld\n", arr[pos].name, maxnum);

}return

0;}

poj 2886 線段樹 單點更新

題意 n個小孩圍成一圈,玩約瑟夫環,每個小孩有一張卡片上面是數字a,正數代表右手邊第a個小孩出隊,負數表示左手邊,遊戲從第k個小孩開始,遊戲直到所有小孩出隊為止,第p個出隊小孩得到f p 分數,f p 為p的因子數 題解 這裡引入反素數的概念不清楚可以看 每次詢問只要從第乙個出隊的執行到當前給出的n...

poj2886 線段樹單點更新)

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

線段樹 單點修改

洛谷p3347 已知乙個數列,你需要進行下面兩種操作 1.將某乙個數加上x 2.求出某區間每乙個數的和 輸入格式 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包含3個整數,表示乙個操作,具體如下...