思路:
模拟,记录并维护每个元素的位置和整个序列最左边的空位位置及最右边的空位位置即可。
实现:
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int a[200005]; 5 int main() 6 { 7 int q; 8 while (cin >> q) 9 { 10 char t; 11 memset(a, 0, sizeof a); 12 int x, l = 100000, r = 100000; 13 for (int i = 0; i < q; i++) 14 { 15 cin >> t >> x; 16 if (t == 'L') 17 { 18 a[x] = l--; 19 if (i == 0) r++; 20 } 21 else if (t == 'R') 22 { 23 a[x] = r++; 24 if (i == 0) l--; 25 } 26 else 27 { 28 cout << min(a[x] - l, r - a[x]) - 1 << endl; 29 } 30 } 31 } 32 return 0; 33 }