使用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 可知...