Partial persistence: Query any past version, but only update the latest. Full persistence: Query and update any version, creating new branches. Confluent persistence: Combine two versions into one (like merging git branches).
Most competitive programming problems need partial persistence: you update sequentially and query any past state.
Full persistence allows "time travel" updates: modify version 5 to create version 10, then modify version 3 to create version 11. You'll focus on partial persistence first, then discuss full persistence.