SDUT 4259 (2023年西安邀請賽K題)

2021-09-20 09:29:52 字數 1245 閱讀 1914

每年有兩種操作,一是詢問[l,r]內的土地這些年來的總產量,二是為[l,r]內的每一塊地的年產量加1。

思路:假設x[i]表示一塊土地第x[i]年增加年產量,則若詢問年為y,總共更新了z次操作,那麼這些年來的總產量為:

若將y看為第z+1次更新操作的話,

將該式子展開化簡即為:

那麼我們只需要用線段樹維護兩個東西,乙個是區間加1操作,另乙個是區間更新的總年份和。

而前面的b陣列只需要乙個字首和就行。

#includeusing namespace std;

typedef long long ll;

const int maxn=1e5+7;

ll lazy1[maxn<<2|1],lazy2[maxn<<2|1];

//年產量增量和,更新年份和;

ll sum1[maxn<<2|1],sum2[maxn<<2|1];

void pushdown(int l,int r,int k)

if(lazy2[k])

}void pushup(int k)

void build()

void updata(int l,int r,int l,int r,int k,int y)

pushdown(l,r,k);

int mid=(l+r)>>1;

if(l<=mid) updata(l,r,l,mid,k<<1,y);

if(r>mid) updata(l,r,mid+1,r,k<<1|1,y);

pushup(k);

}int thisy;

ll myfind(int l,int r,int l,int r,int k)

pushdown(l,r,k);

ll res=0;

int mid=(l+r)>>1;

if(l<=mid) res+=myfind(l,r,l,mid,k<<1);

if(r>mid) res+=myfind(l,r,mid+1,r,k<<1|1);

pushup(k);

return res;

}ll x[maxn];

char s[3];

int main()

build();

scanf("%d",&m);

for(int i=1;i<=m;++i)

else

}printf("\n");

}return 0;

}

2023年西安邀請賽

這是我到大學來第一次去校外參加比賽,還是蠻興奮的。路上火車轉地鐵,地鐵轉大巴,暈暈暈。到了西北工業大學後,先領服裝 隊員牌,然後照相。在大廳裡,能看到很多人,穿著一樣的橙色的衣服,當時就感覺acm這條道路上是不缺同道人的,熱身賽以及正式賽的時候這種感覺更加強烈。領完東西後就回酒店了,午飯是在西工大食...

SDUT 2023年SDUTACM暑假集訓階段總結

2020年sdutacm暑假集訓階段總結 9 501計科1902杜廣優 一 學習內容 暑假新學了哪些專題,每個專題刷了多少題 1 揹包高階 6 2 字典樹 3 3 線段樹 3 4 線段樹掃瞄線 1 5 數論基礎 5 6 kmp 5 7 exkmp 1 8 manacher 1 9 二分圖最大權 3 ...

HDU5017 2023年西安網路賽K題

第三場網路賽又水掉了 說下這題吧。題意很簡單,就是求橢球面a x 2 b y 2 c z 2 d yz e zx f xy 1到原點距離的最小值。比賽開始時就看到了這題,結果開始的思路完全錯浪費了好多時間,甚至還以為是精度問題。到了最後才終於想出做法,無奈沒時間敲。賽後敲一下子就ac了,只能說略可惜...