bzoj 3211 花神遊歷各國(區間開根號)

2021-09-24 05:14:27 字數 875 閱讀 9939

題意:支援兩種操作

將區間[l,r]內的數字都開根號

查詢區間[l,r]內的數字的和

線段樹區間更新,只不過這次我們可能需要修改到單點,

對於乙個int範圍內的非零數字來說最多開六七次就會達到1,故我們可以用線段樹維護乙個標記陣列來表示區間內的數字是不是都為0或者1。

假設我們用bool f[maxn<<2|1]來標記,那麼f[k]=(f[k<<1]&f[k<<1|1])。

那麼這道題就解決啦,看**吧。

#includeusing namespace std;

typedef long long ll;

const int maxn=1e5+7;

ll sum[maxn<<2|1];

bool f[maxn<<2|1];

void pushup(int k)

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

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

build(l,mid,k<<1);

build(mid+1,r,k<<1|1);

pushup(k);

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

if(l==r)

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

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

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

pushup(k);

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

int main()

return 0;

}

BZOJ3211 花神遊歷各國

3211 花神遊歷各國 time limit 5 sec memory limit 128 mb submit 1144 solved 416 submit status discuss description input output 每次x 1時,每行乙個整數,表示這次旅行的開心度 sample...

bzoj3211 花神遊歷各國

其實這是一道sb題 哦不其實是兩道2333333 還有3038也是同一題 然而在寫3038的時候由於資料太水直接就a掉了。剛剛拿之前的code交上去就wa啦。不能判斷區間和是否 r l 1因為會出現0 所以要開多乙個東西表示這個區間還有多少個數不會再改變了 每個數可以開方的次數是很小的,就當做是常數...

bzoj 3211 花神遊歷各國

每次x 1時,每行乙個整數,表示這次旅行的開心度 4 1 100 5 5 51 1 2 2 1 2 1 1 2 2 2 3 1 1 4 10111 11對於100 的資料,n 100000,m 200000 data i 非負且小於10 9 對於這個開方,一開始yy了好久,後來發現,10 9的數頂多...