\(\large\texttt\)
思維題 + 板子題
這道題目蠻有趣的,但坑有點多,在下面會陳述。
不做贅述。
注意出題人十分噁心地沒給 \(x\),\(y\),\(n\) 的關係,請各位注意這點。
看似很難維護,區間操作,但是我們可以利用 \(\texttt\) 的特性來造一棵不同尋常的線段樹。
對於序列上的數的位置 \(i\) ,模 \(2^x\) 後,留下 \(x\) 位字尾,對比所有 \(i\) 模\(2^\) 後留下的字尾,只是增加了第 \(x\) 位( \(0\) 或 \(1\) )。
因此我們可以把序列按這樣構造一棵線段樹,每個節點由父親節點延伸出來,兩個子節點的字尾相同,唯一區別最高位是 \(0\) 或 \(1\)。
???這不就是 \(\texttt\) 嗎 ???
所以,這道題目的本意就是讓你建一棵支援區間修改和查詢的 \(\texttt\) ,按照線段樹1的板子做就好了。
問題解決。
然後我wa了30+發
一定要注意三點:
還有一些細節在**中
#include using namespace std;
#define ls n << 1
#define rs n << 1 | 1
#define int long long
const int n = 5e7;
inline int read()
int a,b,s[n+10],sum[n+10],lazy[n+10],t[n+10];
inline void up(int n)
inline void down(int n)
inline void insert(int n,int k,int p,int q)
if(k&1ll) insert(rs,k>>1ll,p,q-1);
else insert(ls,k>>1ll,p,q-1);
up(n);
}inline void change(int n,int k,int p,int q)
down(n);
if(k&1ll) change(rs,k>>1ll,p,q-1);
else change(ls,k>>1ll,p,q-1);
up(n);
}inline int query(int n,int k,int q)
signed main()
else
}return 0;
}
DIAMOND 超快的蛋白序列比對軟體
相見恨晚,還好遇到了它 今天用blastx將我的轉錄本序列在uniprot蛋白資料庫 700w條序列 中搜尋,80個執行緒,過了1小時大概就分析1000條吧。實在是有點慢,於是我想到之前耳聞的diamond,據說速度非常快,於是我測試了下。沒想到,這工具居然那麼快。根據diamond介紹,它有以下特...
NOIP2013花匠超多方法的題解
原題見洛谷 首先介紹一種我在做題的時候學到的一種空間複雜度為o 1 的解法 首先使用f1,f2分別記錄兩種不同的序列。就是一種為兩邊高中間低和一種為中間高兩邊低的序列。f1,f2的初始值都設成1 我們可以易證選擇了1第一盆其結果一定不會變差 手動滑稽 用x來記錄上一盆,h來記錄當前盆滿足一下幾個條件...
題解洛谷 P2659 美麗的序列
看到題解區基本全是單調棧,我來乙個不同的思路 用並查集來貪心。這是乙個比較經典的 trick,常用來批量處理一條鏈 一棵樹上路徑的最大或最小值問題,大致的思路是按順序列舉每一條邊,並查集維護連通塊來算貢獻。具體到本題,我們可以把數列抽象成一條 n 1 點 n 邊的鏈,i 與 i 1 之間的邊權為 a...