hdu 4417 2012 杭州網路賽

2022-04-04 17:28:56 字數 2999 閱讀 4027

唉,比賽的時候怎麼都不會啊!!

題解:劃分樹+二分答案:劃分樹可以方便的求解k-number。再利用二分答案,即區間內小於h的個數(最大為r-l+1,最小為0)。

1 #include 2 #include 3 #include 4 #include 5

6using

namespace

std;78

#define ls rt<<1

9#define rs rt<<1|1

10#define lson l,m,ls

11#define rson m+1,r,rs

1213

#define maxn 100010

1415

struct

seg_tree

16tt[maxn<<2

];19

int len ,sorted[maxn],toleft[20

][maxn];

20int val[20

][maxn];

2122

void build(int d,int l,int r,int

rt)23

44else

if(val[d][i] >sorted[m])

45 val[d+1][rpos++] =val[d][i];

46else

4754

else

55 val[d+1][rpos++] =val[d][i];56}

57}58 build(d+1

,lson);

59 build(d+1

,rson);60}

6162

int query(int k,int d,int l,int r,int

rt)63

71else

7276

if(s >=k)

7782

else

8391}92

93int bsearch(int r,int h,int l,int r)//

r代表最多有多少個

94104

return

l;105

}106

107int

main()

108120 sort(sorted+1,sorted+n+1

);121 build(0,1,n,1

);122 printf("

case %d:\n

",cas++);

123while(m--)

124138

}139

}140

return0;

141 }

原來是將所有的詢問讀入,按h從小到大排序。然後對於所有的結點也按從小到大排序,然後根據查詢的h,將比h小的點加入到線段樹,然後就是乙個很簡單的區間和,,,,,做的題還是太少了。

後來寫的離線線段樹:

1 #include 2 #include 3 #include 4 #include 5 #include 6

7using

namespace

std;89

#define mid (l+r)>>1

10#define ls rt<<1

11#define rs rt<<1|1

12#define lson l,m,rt<<1

13#define rson m+1,r,rt<<1|1

1415

#define maxn 100010

1617

int sum[maxn<<2

],ans[maxn];

1819

struct

que20

q[maxn];

23struct

node

24in

[maxn];

27int

n,m;

28bool cmp1(const que &a,const que &b)

2932

bool cmp2(const node & a,const node &b)

3336

void pushup(int

rt)37

4041

void build(int l,int r,int

rt)42

49void update(int p,int q,int l,int r,int

rt)50

56int m=mid;

57if(p<=m) update(p,q,lson);

58else

update(p,q,rson);

59pushup(rt);60}

61int query(int l,int r,int l,int r,int

rt)62

7172

intmain()

7385

for(int i=0;i)

8690 build(1,maxn,1

);91 sort(q,q+m,cmp1);

92 sort(in,in+n,cmp2);

9394

int i=0,j=0;95

while(i96102 ans[q[i].id]=query(q[i].l+1,q[i].r+1,1,maxn,1

);103 i++;

104}

105 printf("

case %d:\n

",cas++);

106for(int i=1;i<=m;i++)

107 printf("

%d\n

",ans[i]);

108109

}110

return0;

111 }

hdu 4414 2012杭州網路賽

給出乙個圖,要求 圖中 組成了多少個 十字架,要注意十字架的寬度是奇數,比賽的時候隊友 dfs過的,不過我這樣做也挺快。思路 對每個 進行判斷,上下左右 步長為1 2,25裡面是不是都是符合條件,符合的話判斷是不是個數為奇數即可 include includeconst int maxn 55 ch...

2012杭州網路賽賽後 缺ACDI

a boomerang hdu 4410 最小費用流,建 inf邊保證n個點都被訪問到 include include includeusing namespace std const int n 222,m 111111 const int inf 0x3f3f3f3f mincostmaxflo...

HDUOJ 4738 2013杭州網路賽第1題

傳送門 題意 略。思路 如果所有點不在1個圖中,輸出0,因為不需要去炸了。否則,求出最小權的橋,如果權值為0,則輸出1,這裡要注意,因為總要有人去炸 不過最小權大於0,直接輸出。如果沒橋,輸出 1。include include include includeusing namespace std ...