Learn the properties ,Not just syntax (for beginners)

Revision en1, by DokjaKim, 2026-10-07 17:35:34

Learn the properties, not the syntax

Most beginners waste time on implementation details. The real unlock is knowing what each container guarantees:

  • std::set — Stores unique elements, always sorted, $$$\mathcal{O}(\log n)$$$ insert/lookup. Use when you need deduplication or sorted order.
  • std::map — Key-value pairs, sorted by key, $$$\mathcal{O}(\log n)$$$. Use when you need to count/track something indexed by a value.
  • std::unordered_map — Key-value pairs, $$$\mathcal{O}(1)$$$ average lookup, no order. Use when order doesn't matter and you need raw speed.
  • std::priority_queue — Max element at the top, $$$\mathcal{O}(\log n)$$$ insert/pop. Use when you repeatedly need the largest (or smallest) element.

Real Examples

  • 1883B — Chemistry — Once you know the core property that "a palindrome can have at most one character with an odd frequency", the problem trivializes. The code writes itself in 10 lines using a frequency map (map<char, int>). No complex algorithm needed.
  • 1904A — Forked! — Once you realize that set intersection is as simple as "put one piece's attack coordinates in a set, then check the other piece's moves against it", all arithmetic gymnastics disappear.

The Core Takeaway

Most CP tutorials focus heavily on teaching complex algorithms. Nobody tells you that knowing upper_bound exists saves you from writing manual binary search, or that finding set intersections is just a simple lookup loop.

That meta-knowledge — knowing what tools exist and when to reach for them — is worth infinitely more than memorizing standard code implementations.

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en1 English DokjaKim 2026-10-07 17:35:34 1827 Initial revision (published)