ZOJ 1610 思維 線段樹

2021-09-25 20:06:39 字數 1489 閱讀 1380

zoj 1610

思維:

#include #include using namespace std;

const int maxn = 1e4;

int n;

int e[maxn][3];

int color[maxn];

int ans[maxn];

int main()

for (int i=1; i<=8000; i++) //遍歷每乙個位置,找到最後一次覆蓋這個位置的值

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

if (e[j][0]<=i && i<=e[j][1])

// 現在統計所有顏色段的值 都統計出來

// for(int i=1; i<=right; i++) printf("%d ",color[i]);

int last = -99;

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

} for (int i=0; i<= 8000; i++)

printf("\n");

} return 0;

}

2.線段樹

#include #include using namespace std;

const int maxn = 8010;

struct segementtree tree[maxn*4];

int color[maxn];

int ans[maxn];

void build(int p,int left,int right)

void pushdown(int p)

}void change(int p,int left,int right,int val)

pushdown(p);

int mid = (left(p) + right(p))/2;

if (left <= mid) change(2*p,left,right,val);

if (mid < right) change(2*p+1,left,right,val);

}void ask(int p,int left,int right)

pushdown(p);

int mid = (left(p) + right(p))/2;

if (left <= mid) ask(2*p,left,right);

if (mid < right) ask(2*p+1,left,right);

}int main()

ask(1,1,8000);

// 區間段的顏色已經維護出來

int last = -99;

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

} for (int i=0; i<= 8000; i++)

printf("\n");

} return 0;

}

ZOJ 1610 線段樹區間染色

給長度8000公尺的板,對其中區間染色,問最後能看到的顏色,和該顏色一共出現了幾段 線段覆蓋法 資料比較水 也可以暴力水過 線段樹 include stdio.h include string.h struct node data 40010 int color 8011 void build in...

ZOJ 1610 (線段樹區間set)

題意 在一段線段上塗色,新塗的顏色會覆蓋舊的,問最後每種顏色各有多少段。思路 線段樹區間覆蓋,最後dfs查詢一遍把每個位置的顏色查詢出來,再掃一遍統計有多少段。include include include include include include include include includ...

ZOJ 1610 線段樹區間更新

裸題。注意到只有一次查詢,那麼查詢的時候直接到葉子節點將葉子節點的值放到陣列中,統計結果相當於離散化的乙個過程。對於這道題來說我們進行區間更新不需要像普通的那種求區間和的那樣建立lazy標記,因為我們最後只關心葉子節點的值,故不需要lazy標記。注意的地方,區間長度為 1,8000 在這個區間上進行...