牛客寒假算法基礎集訓營1 G 小a的排列
阿新 • • 發佈:2019-02-07
ace -- 要求 鏈接 bits https href return 我們
題目描述
鏈接:https://ac.nowcoder.com/acm/contest/317/G
來源:牛客網
思路:觀察發現區間內l-r的長度與區間內最大值和最小值的差相等時,區間是‘萌’的
如果長度不相等的話,我們就要尋找l--,r++的數,並且在區間內的數加入要求的區間內;
代碼如下:
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 5 int main() 6 { 7 int n,x,y,l,r; 8 int a[100005]; 9 while(cin >> n >> x >> y)10 { 11 for(int i = 1;i <= n;i++) 12 { 13 cin >> a[i]; 14 if(a[i] == x) 15 l = i; 16 if(a[i] == y) 17 r = i; 18 } 19 if(l > r) 20 swap(l,r); 21 bool flag; 22 int min1 = 0x3f3f3f,max1 = 0,l1,r1; 23 for(int i = l;i <= r;i++) 24 { 25 min1 = min(min1,a[i]); 26 max1 = max(max1,a[i]); 27 } 28 while(max1 - min1 != r - l) 29 { 30 l1 = 1,r1 = n; 31 while(l1 < l &&(a[l1] < min1 || a[l1] > max1))32 l1++;//尋找最左邊的l 33 //cout << l1 << "---"; 34 while(r1 > r &&(a[r1] < min1 || a[r1] > max1)) 35 r1--; 36 //cout << r1 << "--" << endl; 37 l = l1,r = r1; 38 for(int i = l;i <= r;i++) 39 { 40 min1 = min(min1,a[i]); 41 max1 = max(max1,a[i]); 42 } 43 } 44 cout << l << " " << r << endl; 45 } 46 return 0; 47 }
牛客寒假算法基礎集訓營1 G 小a的排列