2120
思路:帶修改的莫隊;
對於離線排序詢問的演算法,如何修改呢?
每個詢問新增乙個修改標記;
表示當前詢問在第幾個修改之後;
然後把修改標記作為第三關鍵字來排序;
每次更新端點,先更新時間;
塊的大小為n的2/3次方;
來,上**:
#include #include#include
#include
using
namespace
std;
#define maxn 100050
struct
querytype ;
struct
querytype qu[maxn];
struct
changetype ;
struct
changetype cha[maxn];
int n,m,size=440,tot,num,ai[maxn],bel[maxn],ti[maxn*10
],ans[maxn];
intnow;
bool
if_[maxn];
inline
void
in(int &now)
}bool
cmp(querytype aa,querytype bb)
else
return aa.l}inline
void change(int
x) cha[x].h=ai[cha[x].to];
ai[cha[x].to]=cha[x].x;
if(if_[cha[x].to])
}inline
void unchange(int
x) ai[cha[x].to]=cha[x].h;
if(if_[cha[x].to])
}inline
void updata(int to,int
x)int
main()
sort(qu+1,qu+tot+1,cmp),l=1,r=0,t=0,now=0
;
for(int no=1;no<=tot;no++)
for(int i=1;i<=tot;i++) printf("
%d\n
",ans[i]);
fclose(stdin),fclose(stdout);
return0;
}
bzoj2120 數顏色 分塊
據說暴力可過2200ms。然而我寫分塊也才1200ms。然而很多人寫分塊跑不過暴力。參考了將狼踩盡 的思路。假設分為m塊 注意不是每塊m個 用sum x y z 表示在塊x y中顏色z 經過離散化以後 的個數,val x y 表示在x y塊中不同顏色的個數。這樣應該就比較容易明白了。修改 看u會影響...
BZOJ 2120 數顏色 分塊
time limit 6 sec memory limit 259 mb submit 6031 solved 2392 submit status discuss 墨墨購買了一套n支彩色畫筆 其中有些顏色可能相同 擺成一排,你需要回答墨墨的提問。墨墨會像你發布如下指令 1 q l r代表詢問你從第...
BZOJ 2120 數顏色 莫隊
題目傳送門 觀察前兩題,莫隊演算法好像是一種只支援查詢的離線演算法,但是莫隊真的不支援修改嗎?答案當然是否定的 莫隊是一種支援查詢和修改的離線演算法。就是一種優美的暴力 考慮在莫隊演算法中增加乙個變數no w 表示當前有no w 個修改已經修改掉了。並在每乙個詢問中增加乙個變數pr e 表示最近的修...