Luogu 2801 教主的魔法

2021-08-17 20:27:38 字數 948 閱讀 7040

給出n個數字

m l r c 給 l - r的數字加c

a l r c 查詢 l - r >=c的數字個數

區間加!線段樹

線段樹不能維護第二個操作啊(霧

分塊吧qwq

我們維護乙個塊的整體加值就好啦

luogu 2801

#include 

#include

#include

#include

const int maxm=1100000;

int h1[maxm],h2[maxm];

int btag[maxm];

int lx[maxm],rx[maxm],pos[maxm];

int block_len,block_num;

int n,m;

inline void pre()

std::sort(h2+lx[i],h2+rx[i]+1);

}}inline void add(int l,int r,int a)

if(rx[pos[r]]!=r)

if(l>r||!l||!r) return;

for(int i=pos[l];i<=pos[r];i++)

btag[i]+=a;

}inline int ask(int l,int r,int c)

if(rx[pos[r]]!=r)

if(l>r||!l||!r) return res;

for(int i=pos[l];i<=pos[r];i++)

res+=rx[i]-(std::lower_bound(h2+lx[i],h2+rx[i]+1,c-btag[i])-h2)+1;

return res;

}int main()

else

}return

0;}

P2801 教主的魔法

題目描述 這裡 思路 這題似乎是道分塊裸題。在查詢時,我們可以對每個塊進行排序,然後二分查詢 k的元素,輸出答案。不幸的是,這道題有點卡分塊。我們可以改變塊的大小和加入優化進行卡常。include pragma gcc optimize 2 pragma gcc optimize 3 pragma ...

Luogu P2801 教主的魔法 分塊

修改,就是乙個區間修改的常規操作,但是為了迎合查詢的需要,對兩端的不完整的塊需要暴力重構,重新進行排序操作,保證每一塊都是單調上公升的順序。然後再說進行查詢的操作,起初,我們需要在每乙個塊內進行排序。保證順序時單調上公升的 在每乙個塊內,是獨立的 然後查詢的時候對每一塊 k 都二分查詢到大於 num...

Luogu P2801教主的魔法(分塊)

題目鏈結 激動qwq。這是我a的第一道分塊。分塊之後對塊內元素暴力sort。修改的時候對於整塊打個標記,查詢的時候只需要查c tag就行了 對於非整塊,暴力修改,改完之後sort 對於查詢 非整塊暴力查詢,整塊二分c tag的位置就好啦 include include include include...