http://codeforces.com/problemset/problem/811/B
题意:
给定一个长度为 N 不重复的数字序列,然后对其进行 M 次询问。
每次询问含L,R,X三个值,问如果数字序列中的 L ~ R 位置范围内进行从小到大的排序后,原本位置为 X 的数字是否变了。
由于 N 和 M 的范围都很小(10000),甚至不用模拟排序,对于每次询问直接 L ~ R 过一遍看有多少个元素小于 X 位置的那个,如果这个计数正好等于 X-L,那么位置为 X 的那个元素自然不会变。
贴上水码:
#include<iostream> using namespace std; int p[10050]; int main() { int n, m; int l, r, x; cin >> n >> m; for (int i = 0; i < n; i++) { cin >> p[i]; } for (int i = 0; i < m; i++) { cin >> l >> r >> x; int cnt = 0; for (int j = l-1; j <= r-1; j++) { if (p[j] < p[x-1]) cnt++; } if (cnt == x - l) cout << "Yes" << endl; else cout << "No" << endl; } return 0; }