JZOJ 4603 顏料大亂鬥

2021-07-14 23:44:50 字數 1569 閱讀 3701

畫師傅又要開始畫畫了,這次他花了三天三夜將一堵牆塗成了白色。

但是畫師傅有個頑劣的**小花,小花討厭畫師傅對ta始亂終棄,所以趁 畫師傅不在用不同的顏料將牆塗來塗去。

然而畫師傅為了保護他的大作,設定了乙個監控機制a。a每隔一段時間會 查珣某一段牆上的顏料的種類數,並將其記錄下來。

現在畫師傅回來了,看到五顏六色色彩斑斕燈火闌珊金碧輝煌的【譁】牆, 一口氣沒換上來,卒。

作為畫師傅的好友殺小姐的你,為了追查畫師傅的死因,於是呼叫了牆的監 控機制a的記錄。於是,你看到了怎樣的記錄呢?

很顯然,開30棵線段樹即可,

但是:

有可能l>r啊!!!

白色是1啊!!!

複雜度:o(

n∗30log(n

));

要優化常數。

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

using namespace std;

const int n=100500;

intread(int &n)

int n,m,ans;

int b[n*3][32],la[n*3];

ints[32];

void doit(int l,int r,int e)

void build(int l,int r,int e)

int t=(l+r)/2;

build(l,t,e*2);

build(t+1,r,e*2+1);

b[e][1]=r-l+1;

}void change(int l,int r,int e,int l1,int r1,int l2)

int t=(l+r)/2;

doit(l,t,e*2),doit(t+1,r,e*2+1);

if(r1<=t)change(l,t,e*2,l1,r1,l2);

else

if(t1,r,e*2+1,l1,r1,l2);

else change(l,t,e*2,l1,t,l2),change(t+1,r,e*2+1,t+1,r1,l2);

fo(i,0,m)b[e][i]=b[e*2][i]+b[e*2+1][i];

}void find(int l,int r,int e,int l1,int r1)

int t=(l+r)/2;

if(r1<=t)find(l,t,e*2,l1,r1);

else

if(t1,r,e*2+1,l1,r1);

else find(l,t,e*2,l1,t),find(t+1,r,e*2+1,t+1,r1);

}int main()

else

{ans=q=0;

fo(i,0,m)s[i]=0;

find(1,n,1,l,r);

fo(i,1,m)if(s[i])ans++,q+=s[i];

printf("%d\n",ans+(q

JZOJ4603 顏料大亂鬥

這裡就不罵辣雞出題人了 這題查詢和修改區間 l r 竟然 l 可以大於 r!而且白色是顏料1!注意上面那些細節,開30顆線段樹就可以ac了。include include include include define fo i,j,k for int i j i k i define fd i,j,...

NOIP模擬 顏料大亂鬥

開始看到前面的題目那麼水,到這題時就開始胡思亂想了,待修改莫隊?樹套樹?30棵線段樹?然後我打了30棵線段樹,常數十分的大啊!超時30分tat。然後旁邊的人把30個顏色的值放到同乙個節點上,然後就對了,常數小而已嘛!雖然兩個方法的時間複雜度理論上是一樣的。其實就是每個節點儲存30個顏色是否出現過,然...

前端打包工具大亂鬥

過去很長一段時間,人們使用 webpack,或基於 webpack taro 的外掛程式系統,構建複雜應用 隨著專案複雜度的公升高,一層層 loader 和 plugin,將開發鏈路大大延長 過長的開發鏈路,除了打包時間變慢,更重要的是嚴重影響力除錯,測試,維護 除此之外,case by case ...