見
這題可以用貪心也可以用分冶(在洛谷看到好多方法),但是我還是選擇了乙個大佬的差分,其實差分分冶我都想到了,可是好像不大會用**實現,而且這題用差分做,和之前我做過的一道差分題的思路一模一樣.還是太菜了。。。
搬自:
我們統計乙個差分陣列,cf[i]=d[i]-d[i-1].
特別的,cf[0]=0.
我們只需要像rmq那樣區間修改即可,修改i–j區間(都減1),只需把cf[i]-1,cf[j+1]+1就可以了,為了得到最優解,cf[i]要為正數,cf[j+1]要為負數,最後一正一負 配對為min(sum(正數),abs(sum(負數)))即可,還有剩下的正(負)數,即為abs(sum(正數)-abs(sum(負數))),so最後的答案為min(sum(正數),abs(sum(負數)))+abs(sum(正數)-abs(sum(負數)))=max(sum(正數),abs(sum(負數));
#include
using
namespace std;
const
int n=
100010
;int a[n]
,d[n]
;int
main()
for(
int i=
1;i<=n;i++
) cout<<
max(sum1,sum2)
}
異或差分序列 P3943 星空 區間異或差分
color 逃不掉的那一天還是來了,小 f 看著夜空發呆。天上空蕩蕩的,沒有一顆星星 大概是因為天上吹不散的烏雲吧。心裡吹不散的烏雲,就讓它在那裡吧,反正也沒有機會去改變什麼了。小 c 拿來了一長串星型小燈泡,假裝是星星,遞給小 f,想讓小 f 開心一點。不過,有 著強迫症的小 f 發現,這串一共 ...
異或差分序列 P3943 星空 區間異或差分
color 逃不掉的那一天還是來了,小 f 看著夜空發呆。天上空蕩蕩的,沒有一顆星星 大概是因為天上吹不散的烏雲吧。心裡吹不散的烏雲,就讓它在那裡吧,反正也沒有機會去改變什麼了。小 c 拿來了一長串星型小燈泡,假裝是星星,遞給小 f,想讓小 f 開心一點。不過,有 著強迫症的小 f 發現,這串一共 ...
種樹 差分約束 貪心
先看貪心版本。每次種的樹在重疊區間越多,種的樹越少。只有結束位置才會重合,就對區間結束的位置從小到大排序。然後遍歷每個區間統計第i個區間種了k個樹,若k大於 t 則continue,否則從區間末尾往前種樹。貪心種樹 include using namespace std struct n print...