分塊
分塊想當於優雅的暴力,主要是求區間的問題。
分塊即將一段數分成很多塊,
我們通常以x=sqrt(n)來表示乙個塊的大小
num=ceil(n ×
\times
× 1.0/x) 來表示塊的個數
分塊主要需要的就是3個陣列,
pos[i]是來表示第i個數所在的塊
l[i]表示第i個塊的左端點
r[i]表示第i個塊的右端點
比如 下面這題
我們得再創乙個ans[i]陣列,用來表示我們在第i個塊上加的數。
但這就誕生了乙個問題,如果加的區間所包括的第i個塊不完整的話,我們能不能在ans[i]上c,
答案是不能的。
對於不完整的塊我們應該暴力解決,在a陣列,即原陣列上加c
對於完整的塊我們只需要在ans陣列上加c即可
所以最終得到的結果即為第i個數的大小為a[i]+ans[pos[i]]
題目描述
給出乙個長為 n 的數列,以及n 個操作,操作涉及區間加法,單點查值。
輸入格式
第一行輸入乙個數字 。第二行輸入n個數字,第i個數字為a[i],以空格隔開。
接下來輸入n行詢問,每行輸入四個數字 opt 、l 、r 、c 以空格隔開,
若opt=0表示將位於[l,r] 的之間的數字都加c 。
若opt=1,表示詢問 a[r] 的值
輸出格式
對於每次詢問,輸出一行乙個數字表示答案。
樣例樣例輸入
4
1 2 2 3
0 1 3 1
1 0 1 0
0 1 2 2
1 0 2 0
樣例輸出2
5
#includeusing namespace std;
int l[2005],r[2005] ,pos[50005],a[50005],ans[50005];
void add(int ll,int rr,int v)
}else
r[num]=n;
for(int i=1;i<=n;i++)
for(int i=1;i<=n;i++)
else
} return 0;
}
javaWeb簡單易懂
武松 瀏覽器。酒館 伺服器。店小二 廚師 servlet或者jsp。來三碗好酒!瀏覽器向伺服器發出http請求。店小二上酒 伺服器的響應。武松從進店到離開 乙個http對話。我們可以看到,web互動的最基本單位為http請求 武松點菜 每個使用者從進入 到離開 這段過程稱為乙個http會話 武松進店...
簡單易懂BFS
廣度優先搜尋,又稱寬度優先搜尋,簡稱bfs bfsbfsbf sbfs bfs從起點開始,優先搜尋離起點最近的點,然後由這個最近的點擴充套件其他稍近的點,這樣一層一層的擴充套件,就像水波擴散一樣。b fs bfsbf s需要借助佇列來實現 根據該思路可以得出乙個簡單的 框架 void bfs 起始點...
KMP 簡單易懂
解決問題 str1中是否有某個子串等於str2,有則返回在str1中得到起始位置。舉例 abcabck 和 abcabct 此時返回 1 abcabcabct 和 abcabct 此時返回3 常規思路 用str2去比較str1從0開始的每一位,比較結束若有str2返回此時比較的起始位置,否則返回 1...