Processing math: 90%
Solutions of Apple trees 2 - MarisaOJ: Marisa Online Judge

Solutions of Apple trees 2

Select solution language

Write solution here.


User Avatar beiv    Created at    5 likes

Bài này chúng ta chặt từng truy vấn với nhau, chặt truy vấn Q/1, Q/2, Q/4,... Q/2x . Với mỗi lần chặt trong đoạn từ l>r. Đặt mid=(l+r)/2. chúng ta update các truy vấn từ l>mid và xử lí. Dùng 2vector để lưu trạng thái đã được tưới nước đầy hay chưa ở đoạn l>r đang xét. Xét đến cây vị trí i , S=get(i) nếu A[i]S thì cây ở vị trí thứ i đã được tưới đầy. Gán ret[i]=mid và ta thêm i vào vector có trạng thái đã tưới nước đủ. Còn không thì chúng ta thêm i vào vector có trạng thái tưới nước chưa đủ và A[i]=S. Và cứ thế chặt cho đến lúc nào dừng thì thôi=). Đây là code mẫu của mình: cpp#clude<bitsstdc++.h>usingnamespacestd;#defefios::syncwithstdio(0);c.tie(0);cout.tie(0);#defelllonglong#defeeln#defepbpushback#defeall(x)x.beg(),x.end()#defef64(ll)(1ll61)#defef32(130)#defeFOU(i,a,b)for(i=(a),b=(b);ib;++i)#defeFOD(i,a,b)for(i=(a),b=(b);ib;--i)#defeREP(i,n)for(i=0,n=(n);i<n;++i)constmod