이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std; 
typedef long long ll; 
#define f(i,a,b) for(int i = a; i < b; i++)
#define fa(i,a,b) for(int i = a; i >= b; i--)
const int N = 1e5 + 5, M = 1e6 + 5, mod = 1e9 + 7; 
int n, m, a[N]; 
struct bit{
    int bit[M]; 
    void upd(int x, int val){
        for(; x < M; x = (x|(x+1))) bit[x] += val;
    }
    int get(int x){
        int ans = 0;
        for(; x >= 0; x = (x&(x+1)) - 1) ans += bit[x];  
        return ans; 
    }
    int que(int l, int r){
        return get(r) - get(l-1); 
    }
}L, R; 
void go(int i, int k){
    int x, y; 
    x = min(a[i], a[i+1]), y = max(a[i], a[i+1]); 
    L.upd(x, k);        
    R.upd(y, k);         
}
int main(){
    cin >> n >> m; 
    f(i,1,n+1) cin >> a[i]; 
    f(i,1,n){
        go(i, 1); 
    }
    while(m--){
        int t, i, val; cin >> t;
        if(t == 1){
            cin >> i >> val; 
            if(i >= 2) go(i-1, -1);
            if(i <= n-1) go(i, -1); 
            a[i] = val; 
            if(i >= 2) go(i-1, 1); 
            if(i <= n-1) go(i, 1); 
        }
        else{
            cin >> i; 
            int ans = n-1; 
            ans -= (L.que(i+1, M-1) + R.que(0, i-1));
        
            cout << ans << "\n"; 
        }
    }
    return 0; 
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |