2012 多校第十場,這個題目比賽的時候我直接在每個節點裡面開了乙個map,結果毫無疑問mle 了,比賽之後看了結題報告說是 分段雜湊,沒學過,後來聽說線段樹稍微剪枝一下就能過,換了一下思路,確實就能過了,每個節點也不需要記錄每種顏色的個數了,只需要記錄最大的編號和最小的就可以了。。
#include#includeusing namespace std;
#define lson u<<1
#define rson u<<1|1
#define maxn 100005
int a[maxn];
struct nodet[maxn<<2];
void pushup(int u)
void pushdown(int u)
}void build(int u,int l,int r)
int mid=(l+r)>>1;
build(lson,l,mid);
build(rson,mid+1,r);
pushup(u);
}void update(int u,int l,int r,int color)
else
}int query(int u,int l,int r,int color)
}int main()}}
}
hdu 4262 線段樹優化
include include include includeusing namespace std define lson u 1 define rson u 1 1 define maxn 100005 int map maxn struct nodet maxn 2 void pushup i...
HDU 1542 掃瞄線 線段樹優化
有些需要說明的地方 以前寫線段樹時線段樹的每個葉節點為乙個數字,代表乙個區域 7 代表第七個單位長度區域 本題不同在於,最小單位區域必須有兩點代表 2 3 代表從2到3 的乙個區域 上篇掃瞄線演算法複雜度為o n 2 本題用離散化法加線段樹優化為nlog n include include incl...
HDU 5091 掃瞄線 線段樹優化
做法,將讀入的每個點 x,y 看做乙個以該點為左上角寬w高h的矩形,然後將矩形看做兩條平行y軸 起點y h,終點y 線,橫座標分別為 x x w 然後可用經典的掃瞄線演算法求解該題,即找出所有矩形重疊的最多次數,即所求值 證明 都在乙個矩形內的點必定他們的上述規定的矩形都兩兩相交,而矩形兩兩相交必然...