#110: 被卡常11次-壓常過程


211096@stu.cchs.chc.edu.tw (唐狗針)

學校 : 彰化縣精誠中學
編號 : 872
來源 : [61.223.79.98]
最後登入時間 :
2024-12-01 20:39:24
a127. Blocking Buildings -- NCTU PCCA 2020 | From: [61.223.112.211] | 發表日期 : 2024-10-19 16:02

看到題目的時候我有看到下面說很卡常,因此原本打算用vector<vector<int>>存k馬上改成鍊事前項星,第一次提交我線段樹節點只開4e6個,丟上去兩個AC剩下全部RE,之後把陣列開到5e6,TLE一片NA(73%),第一反應拿出fread模板貼上去NA(82%),我重新看一次自己的程式還有有哪裡能優化,喔原來我cout沒有拿掉,我馬上改成putchar NA(82%),這時候我的程式已經沒有任何 std :: 的東西了,我都想放棄自己精神AC,不過又想到之前在 a124: 《終焉世界》無息暗殺者 測資加強版 有被pragma卡過,馬上加上這句 #pragma GCC optimize("Ofast,inline,unroll-loops,no-stack-protector,fast-math") NA(82%),還是不行嗎...,我開始嘗試修該線段樹陣列的大小 4.8e6 4.7e6 4.5e6 4.4e6全部NA(82%),最後我上網查要怎麼壓常,於是我加了這句 #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native"),加的時候我看到下面有一句 #define int long long,等等這題好像不需要long long 吧?馬上把他拔掉 提交AC(0.8s),哇...原來是你在搞嗎...

整理一下我加了那些優化:

鍊式前項星取代vector
fread , putchar輸入輸出優化
#pragma GCC 編譯器優化和CPU指令集擴充
修該線段樹陣列大小
*拔掉#define int long long

至於這題的解法
只要對k離線從大到小排序,處理完一個k就把線段樹上所有值為k的從1改成0,不過這點Fenwick tree應該也可以,我沒試過
在線的話就預處理所有k,掛到可持久化線段樹上,剩下就跟離線一樣了
如果寫離線的話應該就不會那麼卡常了qwq

這題蠻像CSES Distinct Values Queries的

 
ZeroJudge Forum