hdu6703
題意就不說了,直接分析吧。
對於1操作,a[pos]+1e7,但是我們每次詢問是(1,n)範圍內的,這個操作顯然就是把這個點給刪了。
對於2操作,詢問[1,r]區間內》=k且不等於a[i] (1<=i<=r) 的最小的數。
題目做法如下:
對位置建權值線段樹,每個結點表示乙個區間,每個結點維護乙個區間的位置的最大值。
(這裡有些繞腦,如果看不懂的話需要畫圖便於理解。)
我們直接看詢問,格式是(r,k),線段樹是(l,r,rt,k,r),mx[rt]表示rt這個區間的最大位置
如果某乙個區間mx[rt]<=r,那麼就說明rt裡面的每乙個數都在[1,r]內,這個顯然不符合條件。
將這個剪枝加入query,就可以過這個題目了
#include
#define sc(n) scanf("%d",&n)
#define pt(n) printf("%d\n",n)
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define vi vector
#define vl vector
#define pb push_back
#define inf 0x3f3f3f3f
using
namespace std;
const
int maxn =
1e5+7;
int n,m;
int a[maxn]
,aid[maxn]
,mx[maxn<<2]
;void
pushup
(int rt)
void
build
(int l,
int r,
int rt)
int mid =
(l+r)/2
;build
(l,mid,rt<<1)
;build
(mid+
1,r,rt<<1|
1);pushup
(rt);}
void
update
(int l,
int r,
int rt,
int x)
int mid =
(l+r)/2
;if(x<=mid)
update
(l,mid,rt<<
1,x)
;else
update
(mid+
1,r,rt<<1|
1,x)
;pushup
(rt);}
intquery
(int l,
int r,
int rt,
int r,
int k)
intmain()
aid[n+1]
= n+1;
build(1
,n+1,1
);int lans =0;
for(
int i=
0;i)else}}
return0;
}
(一句話總結:比賽時這個題目思路不清晰,權值線段樹怎麼維護一直沒想明白,而且死扣這個題,浪費了太多時間。)
hdu6705
題意很簡單,不贅述。
先把每個點的出度按權值從小到大排個序。
把詢問離線。
然後先把所有的邊加進優先佇列(起點,第幾條邊,權值)。
每次擴充套件可以從當前點取下一條邊,和從當前的點取下乙個最小的出邊。
(這裡說的不是很清楚,具體看**第61到63行)
#include
using
namespace std;
typedef
long
long ll;
const
int maxn =
1e5+7;
struct edge};
vector g[maxn]
;struct node};
int n,m,k,qy[maxn]
;ll ans[maxn]
;int
main()
);}int mx =0;
for(
int i=
1;i<=k;i++
)for
(int i=
1;i<=n;i++
)sort
(g[i]
.begin()
,g[i]
.end()
);priority_queue q;
for(
int i=
1;i<=n;i++))
;}int tot =0;
while
(true))
;int v = g[s]
[id]
.to;
if(g[v]
.size()
) q.
push()
;}for(
int i=
1;i<=k;i++
)printf
("%lld\n"
,ans[qy[i]])
;}return0;
}
(一句話總結:比賽時看到第k大就往可持久化線段樹上想,導致根本無從下手,其實只要離線了,用優先佇列可以很簡單的維護,而且在cf上做過不少這種題目,思路竟然還是不到位,實在不應該) 2019CCPC網路選拔賽簽到題題解
因為實力不濟,沒能通過網路賽拿到晉級的名額,心情沉重,故作此文記錄本次網路賽的點滴收穫。其中包含1001 1006 shuffle card 1007 windows of ccpc 1008 fishing master的題解。題目傳送門 題目分析 要找到使 ax orc a xor c axor...
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,...
2019ccpc哈爾濱補題
因為每個字串只能取乙個,剛開始是覺得全部列舉也不會超,後來想想列舉也要用深搜,所以就先記錄擁有各個字元的串,然後深搜 include using namespace std const int maxn 2e6 10 int t char s maxn vector int v 10 bool vi...