玉 | Aizu Online Judge

シンプルな深さ優先探索。全通り試してOK。

int tama[11];
 
bool solve(int i, int n) {
    if (i == 10) {
        int al=-1, bl=-1;
        for (int j = 0; j < 10; j++) {
            if ((1<<j)&n) {
                if (al < tama[j])
                    al=tama[j];
                else
                    return false;
            } else {
                if (bl < tama[j])
                    bl=tama[j];
                else
                    return false;
            }
        }
        return true;
    }
    bool a = solve(i+1, n|(1<<i));
    bool b = solve(i+1, n);
    return a || b;
}
 
int main() {
    while (1) {
        int N; cin >> N;
        for(int i = 0; i < N; i++) {
            for (int j = 0; j < 10; j++) {
                cin >> tama[j];
            }
            if (solve(0, 0)) {
                cout << "YES" << endl;
            } else {
                cout << "NO" << endl;
            }
        }
        break;
    }
    return 0;
}