Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <algorithm>
- using namespace std;
- int t = 1000001;
- int V, W;
- struct contest{
- int start;
- int end;
- };
- bool contestcomp(contest a, contest b) {
- return ((a.start < b.start) ? 1:0);
- };
- int beststartingtime(int X[], int start, int ll, int ul){
- if(start < X[0])
- return -1;
- if(X[ul] < start)
- return X[ul];
- //Starting point exists
- while(ul > ll)
- {
- // cout << X[ll] << " " << X[(ul+ll)/2 + 1] << " " << X[ul] << endl;
- if(X[(ul+ll)/2] == start)
- return start;
- else if(X[(ul+ll)/2] < start)
- {
- if(X[(ul+ll)/2 + 1] > start)
- return X[(ul+ll)/2];
- else
- return beststartingtime(X, start, (ul+ll)/2, ul);
- }
- else
- {
- return beststartingtime(X, start, ll, (ul+ll)/2);
- }
- }
- return -1;
- }
- int main()
- {
- ios::sync_with_stdio(false);
- int N; //N = contests, V = V wormholes, W = W wormholes
- cin >> N >> V >> W;
- contest contests[N];
- for(int i = 0; i < N; i++)
- cin >> contests[i].start >> contests[i].end;
- sort(contests, contests + N, contestcomp);
- int X[V]; //Wormhole V starting times;
- int Y[W]; //Wormhole W ending times;
- for(int i = 0; i < V; i++)
- cin >> X[i];
- sort(X, X + V);
- for(int i = 0; i < W; i++)
- cin >> Y[i];
- sort(Y, Y + W);
- //Scanning complete
- int k = 0;
- for(int i = 0; i < N; i++) //iterate through contests;
- {
- int beststart = beststartingtime(X, contests[i].start, 0, V-1);
- if(beststart == -1)
- break;
- //cout << beststart << endl;
- int bestend = -1;
- for(int j = 0; j < W; j++)
- {
- if(Y[j] >= contests[i].end){
- bestend = Y[j];
- break;
- }
- }
- if(beststart != -1 & bestend != -1)
- t = min(t, bestend - beststart + 1);
- }
- cout << t;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement