唉,比賽的時候怎麼都不會啊!!
題解:劃分樹+二分答案:劃分樹可以方便的求解k-number。再利用二分答案,即區間內小於h的個數(最大為r-l+1,最小為0)。
1 #include 2 #include 3 #include 4 #include 56using
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 67using
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 ...