문제

https://codeforces.com/problemset/problem/1491/A

걸린 시간

00 : 12 : 44

풀이

C++

#include <bits/stdc++.h>
#define INF 1e9
#define all(c) c.begin(), c.end()
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n, q;
    cin >> n >> q;
    vector<int> a(n);
    int cnt = 0;
    for(int i = 0; i < n; i++){
        cin >> a[i];
        if(a[i] == 1) cnt++;
    }
    int t, x;
    for(int i = 0; i < q; i++){
        cin >> t >> x;
        if(t == 1){
            if(a[x-1] == 1) cnt--;
            else cnt++;
            a[x-1] = 1-a[x-1];
        }
        else{
            if(x <= cnt) cout << 1 << "\n";
            else cout << 0 << "\n";
        }
    }
    return 0;
}

0 과 1 로만 구성된 배열 a 와 두가지 종류가 있는 쿼리 q 개가 주어진다.

첫번째 쿼리는 해당 인덱스의 비트(0,1)를 반전시키는 역할, 두번째 쿼리는 비오름차순(중복된 값을 허용하는 내림차순) 으로 정렬된 배열 a 에서 k 번째로 큰 수를 출력한다.

해결방법은 배열 a 에 존재하는 1의 개수를 첫번째 쿼리가 들어올 때 마다 갱신해주고 두번째 쿼리가 들어오면 1의 개수와 k 값을 비교하여 1 또는 0 을 출력해준다.

'Codeforces' 카테고리의 다른 글

Educational Codeforces Round 105 (Rated for Div. 2) A  (0) 2021.03.03
Codeforces #1485A Add and Divide  (0) 2021.03.02
Codeforces #1486A Shifting Stacks  (0) 2021.03.01
Codeforces #1487A Arena  (0) 2021.02.28
Codeforces #1490A Dense Array  (0) 2021.02.28

댓글