題目位址
兩種操作
1. 給 a[i] + 10000000
2. 查詢不存在 在a[1 ~ r] 中 且不低於k的數
在第乙個操作時 由於k的範圍不夠 就相當於把 a[i] 刪除掉即a[i]的下標變為無窮大而對於第二種操作 也就是 等價為在 k之後 的下標的大於r 的可以使用權值線段樹用來維護當前區間最大的 下標如果當前的右端點 大於等於k 且 且最大下標大於 r 那就可以在這個區間中查詢但是不一定這個區間存在 因為也有可能是 在 小於k的那段而且 下標是 由低到高 所以 能左邊 最好左邊最好 返回的不是該點的下標 而是這個點所以 也就是這個l,r
#include
using namespace std;
const
int n =
1e5+
10,inf =
0x3f3f3f3f
;struct nodetr[n *4]
;int a[n]
,id[n]
;int n,m;
void
pushup
(int u)
void
build
(int u,
int l,
int r);if
(l == r)
int mid =
(l + r)
>>1;
build
(u<<
1,l,mid)
;build
(u<<1|
1,mid +
1,r)
;pushup
(u);
}void
modify
(int u,
int k)
int mid =
(tr[u]
.l + tr[u]
.r)>>1;
if(k <= mid)
modify
(u<<
1,k)
;else
modify
(u<<1|
1,k)
;pushup
(u);
}int
query
(int u,
int k,
int r)
int ans =-1
;int mid =
(tr[u]
.r + tr[u]
.l)>>1;
if(k <= mid && tr[u<<1]
.maxp > r)
ans =
query
(u<<
1,k,r);if
(ans !=-1
)return ans;
if(tr[u<<1|
1].r>=k&&tr[u<<1|
1].maxp > r)
ans =
query
(u<<1|
1,k,r)
;return ans;
}int
main()
build(1
,1,n);
int ans =0;
while
(m--
)else}}
return0;
}
2019CCPC網路選拔賽補題
hdu6703 題意就不說了,直接分析吧。對於1操作,a pos 1e7,但是我們每次詢問是 1,n 範圍內的,這個操作顯然就是把這個點給刪了。對於2操作,詢問 1,r 區間內 k且不等於a i 1 i r 的最小的數。題目做法如下 對位置建權值線段樹,每個結點表示乙個區間,每個結點維護乙個區間的位...
2019CCPC網路預選賽解題報告
hdu 6709 fishing master hdu 6702 題目 hdu 6702 題意 給乙個a,b,輸出 a xor c b xor c 值最小的正整數c 型別 思維 思路 輸出a b,如果a b 0輸出1即可 includeusing namespace std define ll lo...
2019 CCPC 網路選拔 array
給乙個 1 到 n 的排列 現在有 m 個操作,每個操作是下面的一種 t leq 10,1 leq n leq 10 5,1 leq m leq 10 5 1 leq k leq n 考場上頭鐵,硬肝了 4h 結考後 20 分鐘調出來,1a.但想出來還是很高興的 我們會發現每次給出的 k 都在 1,...