給出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...