Ynoi2016 鏡中的昆蟲

2022-07-13 19:06:13 字數 1630 閱讀 8333

區間不用種類的數的個數。

這個問題可以轉化為對每個點維護乙個\(pre\),詢問\(l \sim r\)中,有多少個位置是在\(0\sim l-1\)之間的。

這個問題可以用二維偏序做。

然後對於區間賦值的操作,可以證明,如果我們找到所有有變化的位置並且把它改掉,它的總更改次數為\(o(n+m)\)級別的。

那具體實現可以用\(set\)維護區間,注意新加入乙個區間時其他區間可能是被這個區間包含,包含這個區間,和這個區間有交,討論比較麻煩。。

#include#define n 100009

#define ls tr[cnt].l

#define rs tr[cnt].r

using namespace std;

typedef long long ll;

int a[n],n,m,pre[n],now[n<<1],b[n<<1],rot[n];

inline ll rd()

while(isdigit(c))

return f?-x:x;

}struct nodec[n];

struct setnodetr[n*200];

int tott;

inline void upd(int &cnt,int l,int r,int x,int y)

inline int query(int cnt,int l,int r,int r));

if(it==s.end())break;

if(it->l>r)break;

if(it->r<=r));

it=col[co].lower_bound(setnode);

if(it!=col[co].end())

else gg(xx,0);}}

else);

tg=r+1;tg2=co;

s.insert(setnode);col[co].insert(setnode);

break;}}

it=s.lower_bound(setnode);

if(it!=s.begin()));

gg(r+1,l-1);

s.insert(setnode);s.insert(setnode);

col[co].insert(setnode);col[co].insert(setnode);

}else if(it->r>=l));

it=col[co].lower_bound(setnode);

if(it!=col[co].end())

s.insert(setnode);col[co].insert(setnode);}}

s.insert(setnode);col[x].insert(setnode);

if(tg));

if(it!=col[tg2].begin())

else gg(tg,0);

}it=col[x].lower_bound(setnode);

if(it!=col[x].begin())

else gg(l,0);

it++;

if(it!=col[x].end())

}else

} return 0;

}

Ynoi2016 這是我自己發明的

link 支援換根和給定兩個點,求子樹中滿足權值相同的方案數 換根操作和遙遠的國度一題類似,直接對應到 rm 序上處理即可 後面的問題和 texttt 類似 仍然使用子樹對應在 rm 序上是一段連續區間,然後容斥得到下式 sum get l 1 1,x times get l 2 1,x get r...

YNOI2016 這是我自己的發明

看到這個標題立刻想到 絕地科學家,八倍不屏息啊,八百里外把頭打啊.首先我們發現如果只考慮第二個操作,這棵樹就是假的,我們可以直接莫隊解決 如果考慮換根的話.可以把乙個操作換成小於等於9個操作就可以了 當然怎麼換,有一些非常噁心的分類討論 嚶嚶嚶ynoi 題是好題 但是要卡常 首先要fread fwr...

Ynoi2016 這是我自己的發明(莫隊)

話說這道題資料是不是都是鏈啊,我不手動擴棧就全 re 不過 a 了這題還是很爽的,通過昨晚到今天早上的奮鬥,終於肝出了這題 其實樓上說的也差不多了,就是把區間拆掉然後莫隊瞎搞 弱化版 bzoj snoi2017 乙個簡單的詢問 那我先講弱化版吧 可以發現 sum get l 1,r 1,x time...