能不能帮下孩子,老超时

题目总版

```cpp #include<bits/stdc++.h> #define MAX 100010 using namespace std; int n, ll, rr; int l[MAX], r[MAX]; int sl,sr; void swap(int &a, int &b) { a = a ^ b; b = a ^ b; a = a ^ b; } void sorted() { for(int i = 0; i < n; i++) { for(int j = i + 1; j < n; j++) { if(l[i] > l[j]) { swap(r[i], r[j]); swap(l[i], l[j]); } } } } void quickSort(int *arr,int *a,int begin,int end) { if(begin < end) { int temp = arr[begin]; int t = a[begin]; int i = begin; int j = end; while(i < j) { while(i<j && arr[j] > temp) j--; arr[i] = arr[j]; a[i] = a[j]; while(i<j && arr[i] <= temp) i++; arr[j] = arr[i]; a[j] = a[i]; } arr[i] = temp; a[i] = t; quickSort(arr,a,begin,i-1); quickSort(arr,a,i+1,end); } else return; } int main(){ int t; int k; while(cin >> n >> ll >>rr) { t = 0;k = 0; for(int i = 0; i < n; i++) { int a, b; cin >> a >> b; if(a < 0)a = 0; if(b < 0)b = 0; if(a < ll)a = ll; if(b > rr)b = rr; if(a > rr)a = b = 0; if( a - b == 0) { continue; } else { l[k] = a; r[k] = b; //cout << "--" << l[k] << ' ' << r[k] << endl; k++; } } n = k; //sorted(); quickSort(l,r,0,n-1); //for(int i = 0; i < n; i++)cout << "---" <<l[i]<<' '<< r[i] << endl; int nr = r[0]; sl = l[0]; for(int i = 0; sr != rr||sl != ll; i++) { sr = nr; t++; //cout << '+' << sr <<endl; int dis = sr; for(int j = 0; l[j] <= sr&&j < n; j++) { if(r[j] > sr) { nr = r[j]; } } if(t > n){ t = -1; break; } } if(t == 0)t = -1; cout << t << endl; } return 0; } ```
by Edwardblue @ 2021-05-16 22:27:00


贪心
by Ctjer @ 2021-05-16 22:27:06


bdfs请
by Union_of_Britain @ 2021-05-16 22:29:24


您的复杂度显然是 $O(n^2)$,无法通过本题
by 日居月诸 @ 2021-05-16 23:00:41


|