proving an asymptotic bound
Knowing the definitions is one thing; actually proving 'f(n) is O(g(n))' is a skill with a recipe. The good news is that almost every routine bound follows the same handful of moves, and once you have seen them a few times they become mechanical. The aim is to produce the witnesses c and n0 from the previous entry.
The standard recipe for an upper bound: (1) Write f(n) out as a sum of terms. (2) For each term, find a constant times g(n) that is at least as big, once n is large enough — typically by replacing a smaller power of n by g(n), using the fact that for n >= 1, n^a <= n^b when a <= b. (3) Add up those constants to get a single c. (4) Record the largest threshold you needed as n0. As a worked example, prove 4n^2 + 2n + 7 is O(n^2): for n >= 1, 2n <= 2n^2 and 7 <= 7n^2, so 4n^2 + 2n + 7 <= 4n^2 + 2n^2 + 7n^2 = 13n^2. Done, with c = 13 and n0 = 1. For a lower bound you instead drop or under-estimate terms: 4n^2 + 2n + 7 >= 4n^2, giving Omega(n^2). Both directions together give Theta(n^2).
Common moves worth memorizing: a sum of finitely many terms is Big-O of its largest term; a constant times a function does not change its order; and for a limit-based proof you compute f(n)/g(n) and check it tends to a constant (Theta), zero (o), or infinity (omega). One honest pitfall: you must keep c and n0 fixed and independent of n — a 'proof' that quietly lets c grow with n proves nothing, because then it is not a constant factor at all.
Prove n^3 + 100n^2 is O(n^3) but NOT O(n^2). Upper: for n >= 1, 100n^2 <= 100n^3, so n^3 + 100n^2 <= 101n^3, giving O(n^3) with c = 101, n0 = 1. Not O(n^2): if n^3 + 100n^2 <= c n^2 held for all large n, dividing by n^2 gives n + 100 <= c, impossible for fixed c as n grows. So no witnesses exist.
To disprove a Big-O bound, show the required c would have to grow with n.
c and n0 must be constants chosen once, not quantities that depend on n. A bound that needs c to grow with n is not a valid Big-O proof.