# Video Stitching in C++

Suppose we have a series of video clips from a sporting event that lasted T seconds. Now these video clips can be overlapping with each other and have varied lengths. Here each video clip clips[i] is an interval − it starts at clips[i][0] time and ends at clips[i][1] time. We can cut these clips into segments freely − We have to find the minimum number of clips needed so that we can cut the clips into segments that cover the entire sporting event ([0, T]). If the task is impossible, return -1. So if the input is like [[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]], and T = 10, then the output will be 3, as we can take clips [0,2], [8,10] and [1,9], a total of 3 clips, then we can reconstruct the sporting event as follows, we cut [1,9] into segments [1,2] + [2,8] + [8,9]. Now we have segments [0,2] + [2,8] + [8,10] which are covering the sporting event [0, 10].

To solve this, we will follow these steps −

• Create an array v of size T + 1, and fill this with – 1

• n := size of clips

• for i in range 0 to n – 1

• if clips[i, 0] > T, then skip to the next iteration

• v[clips[i, 0]] := max of v[clips[i, 0]] and min of (clips[i, 1] and T)

• curr := v[0]

• if v[0] is -1, then return -1

• i := 1, ret := 1 and next := 0

• while curr < T and i <= n

• while i <= curr

• next := max of next and v[i]

• increase i by 1

• if next = curr and next is -1, then return -1

• curr := next

• return ret when curr >= T, otherwise return – 1

Let us see the following implementation to get better understanding

## Example

Live Demo

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int videoStitching(vector<vector<int>>& clips, int T) {
vector <int> v(T + 1, -1);
int n = clips.size();
for(int i = 0; i < n; i++){
if(clips[i][0] > T)continue;
v[clips[i][0]] = max(v[clips[i][0]], min(clips[i][1],
T));
}
int curr = v[0];
if(v[0] == -1)return -1;
int i = 1;
int ret = 1;
int next = 0;
while(curr < T && i <= n){
while(i <= curr){
next = max(next, v[i]);
i++;
}
if(next == curr || next == -1) return -1;
curr = next;
ret++;
}
return curr >= T? ret : -1;
}
};
main(){
vector<vector<int>> v1 = {{0,2},{4,6},{8,10},{1,9},{1,5},{5,9}};
Solution ob;
cout << (ob.videoStitching(v1, 10));
}

### Input

[[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]]
10

## Output

3