可以說是資料結構學傻了的典型案例了
昨天跳到這題上
然後思考了一下
噫!好!線段樹裸題
然後打完板子,發現\( n \le 10^9 \)
顯然線段樹直接做不太行
然後這題又只有普及的難度
然後我就打了神奇的動態開點線段樹水過
qwq之後看題解發現正解是\( o(m^2) \)的暴力
因為常數小跑的更快啊qwq
#include #include#include
#define int long long
using
namespace
std;
int cnt=1,tr[150000
<<2],tag[150000
<<2],lx[150000
<<2],rx[150000
<<2],n,m,root=1
;void pushup(int
o)void pushdown(int o,int ln,int
rn)}
void update(int l,int r,int l,int r,int& o,int
c)
int mid=(l+r)>>1
; pushdown(o,mid-l+1,r-mid);
if(l<=mid)
if(r>mid)
pushup(o);
}int query(int l,int r,int l,int r,int &o)
int ans=0,mid=(l+r)>>1
; pushdown(o,mid-l+1,r-mid);
if(l<=mid)
if(r>mid)
ans+=query(l,r,mid+1
,r,rx[o]);
return
ans;
}void debug(int l,int r,int
o)signed main()
else
} return0;
}
洛谷 P2781 傳教
題目鏈結 讀完題後 哎線段樹水題呀!再一看資料範圍 好像 不對勁。其實這道題並不難,因為 m 值很小,所以可以用 o n 2 o n 2 o n2 的演算法直接過。對於每個 1 操作,把它記下來。對於每個 2 操作,將之前所有記錄的區間與 2 操作取個交集就 ok 了。當然也可以把 2 操作也記下來...
洛谷 P2781 傳教
題意很簡單,就是要求你寫乙個資料結構,支援區間加法和區間查詢 顯然,線段樹模板嘛。不過 n 10 9 驚呆世人,啊哈,靈光一現,分塊貌似可做,emmmm有感覺不行,nlogn 線段樹空間是炸掉了,re 50 分 include define n 100000000 using namespace s...
題解 洛谷P2161 會場預約(線段樹)
先說一下這道題的解題思路,我們使用離線操作的做法。記錄讀入的資料,把開始結束日期存在結構體裡,並記錄是a操作還是b操作。開乙個陣列記錄染色情況 乙個cnt陣列記錄第幾個操作推掉了幾個預約,讀入後我們倒著迴圈進行查詢,如果讀入的是b就跳過,如果是a的話就將開始到結束日期的所有點染成當前序號的顏色。如果...