傳送門
題意就懶得複述了
直接對著尤拉序建線段樹,每個節點用乙個堆來維護標記。
每次修改可能導致一部分區間被某個點覆蓋,而且這個覆蓋並不遵循後邊的修改會覆蓋前面的修改這樣的規則,而是深度小的黑點優先於深度大的黑點,因此需要用堆來維護標記。由於區間只會完全包含,不會出現交叉的情況,可以標記永久化,刪除也容易處理。
#include#includeview code#include
#include
#define ll long long
#define lx (x<<1)
#define rx ((x<<1)|1)
using
namespace
std;
char ibuf[20000004],*iptr=ibuf-1
,c;inline
int_()
inline
int_char()
char obuf[5000000],*optr=obuf;
inline
void
_(ll x)
const
int mn = 210000
;struct nab[mn];
int n, m, num=0, f[mn], w[mn], l[mn], si[mn], l[mn], r[mn], pdf[mn], order = 0
, color[mn], deep[mn];
ll lose[mn
<<2
];ll ans[mn
<<2
];ll co[mn];
priority_queue
tag[mn<<2
];pair
pair_add(paira, pairb)
inline
void
in(int x,int y)
void dfs1(int
x) r[x] =order;
}void build(int x, int l, int
r)
int mid = l+r>>1
; build(lx, l ,mid);
build(rx, mid+1
, r);
lose[x] = lose[lx]+lose[rx];
}void update(int x, int l, int
r)else
while(tag[x].size() && (!color[tag[x].top()])) tag[x].pop();
if(tag[x].size())
}pair
ask(int x, int l, int r, int l, int
r)
int mid = l+r>>1
; pair
res;
if (r <=mid)
else
if (l >mid)
else
while(tag[x].size() && (!color[tag[x].top()])) tag[x].pop();
if(tag[x].size())
return
res;
}void addtag(int x, int l, int r, int l, int r, int
p) update(x, l, r);
return
; }
int mid = l + r >> 1
;
if (r <=mid)
else
if (l >mid)
else
update(x, l, r);
}int
main()
else
if (s == 'f'
)else
if (s == 'm'
) }
}fwrite(obuf,
1,optr-obuf,stdout);
}
2020智算之道複賽
共 5 個測試點 每個測試點 20 分 每個測試點限時 1 秒 執行記憶體上限 512mb 咕咕有兩個數字 a,b 它忘記了 a 的前三位 記除去前三位的 a 為 aa 但它記得 a 與 b 滿足 a 0 mod b 即 a 是 b 的倍數。請你幫它求出有多少種滿足條件的 a。注意 a 沒有前導 0...
智算之道 2020智算之道初賽第三場題解
乙個模擬的水題.int main return 0 這個b.卡的直接醉了 按照題意模擬即可 模擬建議使用雙端佇列deque 最好還是陣列吧,deque必須全域性才可以 被deque全域性卡了乙個小時40分鐘 第乙個坑點是注意摸牌順序 可能會wa 第二個坑點是處理摸牌順序 可能會t 第三個坑點是刪牌標...
2020 智算之道 初賽 第三場
2020 中國軟體行業智慧型應用程式設計大賽 奇怪的比賽 似乎算是ioi賽制,最高分最短執行時間排名靠前,題目有部分分 維護當前溫度和當前體積,按要求修改或輸出資訊 在整個過程中,維護同一人手牌中同一點數的牌最多只有一張。維護雙向鍊錶表示兩人的手牌,簡單起見設定首尾為 哨兵節點 維護map 點數,指...