經典入門題,敵兵布陣
1 #include 2 #include 3 #include4using
namespace
std;56
int n,aa[50005],cc[50005];7
8int lowbit(int
x)11
12void add(int x,int
y)17}18
19int sum(int
x)25
return
s;26}27
28int
main()
40 printf("
case %d:\n
",countn);
41while(~scanf("%s"
,str))
49if(str[0]=='q'
)54if(str[0]=='s'
)59}60 countn++;61}
62return0;
63 }
給定n個高度,有m個詢問lr之間小於等於h的個數
1 #include 2 #include 3 #include4using
namespace
std;
5#define bt(x) x&(-x)
6const
int maxn = 1e5+10;7
intn, m, a[maxn], sum[maxn];
8struct
node
13}t[maxn];
14struct
node2
19}tt[maxn];
20void ad(int x, int
xx)25}26
int q(int
x)32
return
sum;33}
34int
main()
45 sort(t+1, t+n+1
);46
for(int i = 1; i <= m; ++i)
50 sort(tt+1, tt+m+1
);51
int num = 1
;52 printf("
case %d:\n
", tt);
53for(int i = 1; i <= m; ++i)
60 sum[tt[i].y] = q(tt[i].r+1) -q(tt[i].l);61}
62for(int i = 1; i <= m; ++i)65}
66return0;
67 }
一條街上住著n個桌球愛好者,有不同的能力值,每場比賽需要3個人(兩名選手一名裁判)要求裁判住在選手中間並且能力值在兩名選手中間,問一共可以組織多少種比賽
1 #include 2 #include3using
namespace
std;
4#define ll long long
5#define bt(x) x&(-x)
6const
int maxn = 1e5+10;;7
intt, n, a[maxn], b[maxn], c[maxn], d[maxn];
8void add(int x, int
y)13}14
int q(int
x)20
return
sum;21}
22int
main()
32 memset(d, 0, sizeof(int)*maxn);
33for(int i = n; i >= 1; --i)
37 ll sum = 0;38
for(int i = 1; i <= n; ++i)
41 printf("
%lld\n
", sum);42}
43return0;
44 }
神奇的bit
find函式,利用二進位制來快速求出第k大數,只需log複雜度
1 #include 2 #include3using
namespace
std;
4#define bt(x) x&(-x)
5const
int maxn = 200009;6
intn, a[maxn], b[maxn], sum[maxn], c[maxn];
7void add(int x, int
y)12}13
int f(int
x)else22}
23return xx+1;24
}25intmain()
32for(int i = n; i >= 1; --i)
37for(int i = 1; i <= n; ++i)40}
41return0;
42 }
區間更新
推薦部落格
自從有了它之後。。什麼?線段樹是什麼?
1 #include 2using
namespace
std;
3#define ll long long
4#define bt(x) x&-x
5const
int maxn = 100009;6
intn, m, x, y;
7ll xx, c1[maxn], c2[maxn];
8void add(int
x, ll y)
11 ll f(int
x)16
intmain()
22char str[3
];23
for(int i = 0; i < m; ++i)else32}
33return0;
34 }
如果沒有x直接判斷逆序對奇偶性,否則判斷x個數的奇偶性(1要特判)
因為最後乙個放的人肯定可以放成勝態
1 #include 2 #include 3 #include4 #include 5
using
namespace
std;67
const
int m = 1e9+5;8
const
int maxn = 100009;9
char str[222
];10
int a[maxn], n, numx, numi = 1
, b[maxn], m[maxn];
1112
void add(int
x)17}18
19int f(int
x)25
return
sum;26}
2728
intq()
34return
num;35}
3637
intmain()
44if(!numx));
49if(q()&1) printf("
w\n"
);50
else printf("
l\n"
);51
return0;
52}53if(n == 1)56
if(numx&1) printf("
w\n"
);57
else printf("
l\n"
);58
return0;
59 }
只有不斷學習才能進步!
樹狀陣列 BIT
樹狀陣列模版 注意 樹狀陣列x必須 0,因為lowbit 0 0,會死迴圈 單點更新區間查詢 在log n 內修改單點,求出cnt x a 1 a x 之和 求區間 a,b 之和只要求出 sum b sum a 1 即可 define rep i,a,n for int i a i n i defi...
樹狀陣列(BIT)
樹狀陣列 bit 是能夠完成下述操作的資料結構。在解題過程中,我們有時需要維護乙個陣列的字首和s i a 1 a 2 a i 但是不難發現,如果我們修改了任意乙個a i s i s i 1 s n 都會發生變化。可以說,每次修改a i 後,調整字首和s在最壞情況下會需要o n 的時間。當n非常大時,...
BIT二叉索引樹(樹狀陣列)
powered by phantom lsh將上面的求連續和問題稍微改進一下,現在需要支援一種新的操作 add x d 即把a x 增加d。這樣一來,如果通過字首和的方式計算就不能簡化計算了,因為每次修改乙個元素都要修改所有在它後面的字首和。有什麼解決辦法呢?我們需要用一種新的資料結構 bit二叉索...