You are on page 1of 5

Programa de studiu pentru concursurile de IT (gen olimpiade)

1.Programming Techniques
Input and Output
Working with Numbers
Shortening Code
Recursive Algorithms (Subsets, Permutations)
Backtracking (examples)
Bit Manipulation&Bit Operations
Representing Sets

2.Complexity Analysis of Algortims (Efficiency)


Time Complexity
Calculation Rules
Common Time Complexities
Estimating Efficiency
Examples (Maximum Subarray Sum, Two Queens Problem)

3.Sorting and Searching


Sorting Algorithms
Bubble Sort
Merge Sort
Sorting Lower Bound
Counting Sort
Sorting in Practice
Solving Problems by Sorting
Sweep Line Algorithms
Scheduling Events
Tasks and Deadlines
Binary Search
Implementing the Search
Finding Optimal Solutions

4.Data Structures
Dynamic Arrays
Vectors
Iterators and Ranges
Other Structures
Set Structures
Sets and Multisets
Maps
Priority Queues
Policy-Based Sets
Set Versus Sorting
Map Versus Array
Priority Queue Versus Multiset

5.Dynamic Programming
Basic Concepts
Finding an Optimal Solution
Counting Solutions
Examples
Longest Increasing Subsequence
Paths in a Grid
Knapsack Problems
From Permutations to Subsets
Counting Tilings

6.Graph Algorithms
Basics of Graphs
Graph Terminology
Graph Representation
Graph Traversal
Depth-First Search
Breadth-First Search
Applications
Shortest Path
Bellman–Ford Algorithm
Dijkstra’s Algorithm
Floyd–Warshall Algorithm
Directed Acyclic Graphs
Topological Sorting
Dynamic Programming
Successor Graphs
Finding Successors
Cycle Detection
Minimum Spanning Trees
Kruskal’s Algorithm
Union-Find Structure
Prim’s Algorithm

7.Algorithm Design Topics


Bit-Parallel Algorithms
Hamming Distances
Counting Subgrids
Reachability in Graphs
Amortized Analysis
Two Pointers Method
Nearest Smaller Elements
Sliding Window Minimum
Finding Minimum Values
Ternary Search
Convex Functions
Minimizing Sums

8.Range Queries
Queries on Static Arrays
Sum Queries
Minimum Queries
Tree Structures
Binary Indexed Trees
Segment Trees
Additional Techniques

9.Tree Algorithms
Basic Techniques
Tree Traversal
Calculating Diameters
All Longest Paths
Tree Queries
Finding Ancestors
Subtrees and Paths
Lowest Common Ancestors
Merging Data Structures
Advanced Techniques
Centroid Decomposition
Heavy-Light Decomposition

10.Mathematics
Number Theory
Primes and Factors
Sieve of Eratosthenes
Euclid’s Algorithm
Modular Exponentiation
Euler’s Theorem
Solving Equations
Combinatorics
Binomial Coefficients
Catalan Numbers
Inclusion-Exclusion
Burnside’s Lemma
Cayley’s Formula
Matrices
Matrix Operations
Linear Recurrences
Graphs and Matrices
Gaussian Elimination
Probability
Working with Events
Random Variables
Markov Chains
Randomized Algorithms
Game Theory
Game States
Nim Game
Sprague–Grundy Theorem

11.Advanced Graph Algorithms


Strong Connectivity
Kosaraju’s Algorithm
2SAT Problem
Complete Paths
Eulerian Paths
Hamiltonian Paths
Applications
Maximum Flows
Ford–Fulkerson Algorithm
Disjoint Paths
Maximum Matchings
Path Covers
Depth-First Search Trees
Biconnectivity
Eulerian Subgraphs

12.Geometry
Geometric Techniques
Complex Numbers
Points and Lines
Polygon Area
Distance Functions
Sweep Line Algorithms
Intersection Points
Closest Pair Problem
Convex Hull Problem

13.String Algorithms
Basic Topics
Trie Structure
Dynamic Programming
String Hashing
Polynomial Hashing
Applications
Collisions and Parameters
Z-Algorithm
Constructing the Z-Array
Applications
Suffix Arrays
Prefix Doubling Method
Finding Patterns
LCP Arrays

14.Additional Topics
Square Root Techniques
Data Structures
Subalgorithms
Integer Partitions
Mo’s Algorithm
Segment Trees Revisited
Lazy Propagation
Dynamic Trees
Data Structures in Nodes
Two-Dimensional Trees
Treaps
Splitting and Merging
Implementation
Additional Techniques
Dynamic Programming Optimization
Convex Hull Trick
Divide and Conquer Optimization
Knuth’s Optimization
Miscellaneous
Meet in the Middle
Counting Subsets
Parallel Binary Search
Dynamic Connectivity

You might also like