給長度8000公尺的板,對其中區間染色,問最後能看到的顏色,和該顏色一共出現了幾段
線段覆蓋法
資料比較水 也可以暴力水過
線段樹:
#include "stdio.h"
#include "string.h"
struct node
data[40010];
int color[8011];
void build(int l,int r,int k)
void updata(int l,int r,int k,int op)
if (data[k].c!=-1)
mid=(data[k].l+data[k].r)/2;
if (r<=mid) updata(l,r,k*2,op);
else
if (l>mid) updata(l,r,k*2+1,op);
else
if (data[k*2].c==data[k*2+1].c) data[k].c=data[k*2].c;
else data[k].c=-1;
}void query(int k)
if (data[k].c!=-1)
data[k*2].c=data[k*2+1].c=data[k].c;
query(k*2);
query(k*2+1);
}int main()
memset(color,-1,sizeof(color));
query(1);
memset(sum,0,sizeof(sum));
now=color[0];
sum[now]++;
for (i=1;i<=m;i++)
if (color[i]!=now)
for (i=0;i<=m;i++)
if (sum[i]!=0) printf("%d %d\n",i,sum[i]);
printf("\n");
}return 0;
}
ZOJ 1610 (線段樹區間set)
題意 在一段線段上塗色,新塗的顏色會覆蓋舊的,問最後每種顏色各有多少段。思路 線段樹區間覆蓋,最後dfs查詢一遍把每個位置的顏色查詢出來,再掃一遍統計有多少段。include include include include include include include include includ...
ZOJ 1610 線段樹區間更新
裸題。注意到只有一次查詢,那麼查詢的時候直接到葉子節點將葉子節點的值放到陣列中,統計結果相當於離散化的乙個過程。對於這道題來說我們進行區間更新不需要像普通的那種求區間和的那樣建立lazy標記,因為我們最後只關心葉子節點的值,故不需要lazy標記。注意的地方,區間長度為 1,8000 在這個區間上進行...
ZOJ 1610 思維 線段樹
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 遍歷每乙個位...