Luogu P2801教主的魔法(分塊)

2022-05-01 01:18:11 字數 1147 閱讀 8280

題目鏈結

激動qwq。這是我a的第一道分塊。

分塊之後對塊內元素暴力sort。修改的時候對於整塊打個標記,查詢的時候只需要查c-tag就行了

對於非整塊,暴力修改,改完之後sort

對於查詢……非整塊暴力查詢,整塊二分c-tag的位置就好啦

#include#include

#include

#include

#include

#include

#define maxn 1000010

#define sqtn 1200

using

namespace

std;

inline

long

long

read()

while

(isdigit(ch))

return num*f;

}struct

node

};struct

block

}que[sqtn];

intd[maxn];

ints[maxn];

intw[maxn];

intle[sqtn],ri[sqtn];

void sorten(intx)}

intmain()

for(int i=n;i>=1;--i);

}for(int i=1;i<=blo;++i) sorten(i);

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

else

if(c[0]=='a'

)

intfrom=max(le[s[y]],x);

for(int j=from;j<=y;++j)

for(int j=s[x]+1;jj)

else l=mid+1

; }

ans+=now.tot-lim+1

; }

printf(

"%d\n

",ans);}}

return0;

}/*5 31 2 3 4 5

a 1 5 4

m 3 5 1

a 1 5 4

*/

Luogu P2801 教主的魔法 分塊

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

Luogu 2801 教主的魔法

給出n個數字 m l r c 給 l r的數字加c a l r c 查詢 l r c的數字個數 區間加!線段樹 線段樹不能維護第二個操作啊 霧 分塊吧qwq 我們維護乙個塊的整體加值就好啦 luogu 2801 include include include include const int ma...

P2801 教主的魔法

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