ural1521 線段樹解約瑟夫問題

2021-06-08 08:41:57 字數 640 閱讀 6252

使用sum陣列來記錄當前區段的個數

pushup來更新子節點與父節點的關係,實現很簡單,但是要注意每次節點個數在減少,注意查詢時要求的長度要模一下當前節點的個數

#include #include #include using namespace std;

const int maxn=100010;

int sum[maxn<<2];

void pushup(int idx)

void build(int left,int right,int idx)

int query(int val,int left,int right,int idx)

int mid=(right+left)>>1;

int ans;

if(sum[idx<<1]>=val)

ans=query(val,left,mid,idx<<1);

else

ans=query(val-sum[idx<<1],mid+1,right,idx<<1|1);

pushup(idx);

return ans;

}int main()

}

1 5 21 角谷猜想

描述 所謂角谷猜想,是指對於任意乙個正整數,如果是奇數,則乘3加1,如果是偶數,則除以2,得到的結果再按照上述規則重複處理,最終總能夠得到1。如,假定初始整數為5,計算過程分別為16 8 4 2 1。程式要求輸入乙個整數,將經過處理得到1的過程輸出來。輸入乙個正整數n n 2,000,000 輸出從...

URAL1297 字尾陣列

題目意思 給你乙個字串,要你求出最長的回文子串 解題思路 把原串的反串加個原串後面,中間加個沒有出現過的字元 然後,原串中,下標i在反串中對應的位置為2 l i 如果求以i為對稱軸的回文串,我們求suffix i 和suffix 2 l i 的lcp 如果求以i和i 1為對稱軸的回文串,我們求suf...

ural1517字尾陣列

題意 求兩串字元 0 255 的最長公共字串 思路 先將兩個字元鏈結起來,中間用乙個不曾出現過的字元,然後直接求出height陣列,然後根據它的特性,求出最長的公共字串,當然這個最長公共字串的座標要符合乙個在第乙個串中,另乙個在另一串中.這個好處理,直接根據sa陣列特性,sa i 1 sa i 可知...