제출 #1349955

#제출 시각아이디문제언어결과실행 시간메모리
1349955michael12Simple game (IZhO17_game)C++20
0 / 100
3 ms6676 KiB
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<numeric>
#include<string>
#include<stack>
#include<queue>
#include<string.h>
#include<array>
#include<climits>
#include<algorithm>
#include<cmath>
using namespace std;
#define ff first
#define ss second
#define pb push_back
const int maxn = 100005;
#define endl '\n'
#define int long long
struct ST{
   int n;
   vector<int> tree;
   vector<int> lazy;
   ST(int size){
    n = size;
    tree.resize(4 * n);
    lazy.resize(4 * n);
   }
   int push(int node, int start, int end){
     if(lazy[node] != 0){
        tree[node] += (start - end + 1) * lazy[node];
        if(start != end){
            lazy[2 * node] += lazy[node];
            lazy[2 * node + 1] += lazy[node];
        }
        lazy[node] = 0;
     }
   }
   void update(int node, int start, int end, int l, int r, int val){
       push(node, start, end);
      if(start > r || end < l) return;
      if(start >= l && end <= r){
         lazy[node] += val;
         return;
      }
      int mid = (start + end) / 2;
      update(2 * node, start, mid, l, r, val);
      update(2 * node + 1, mid + 1, end, l, r, val);
      tree[node] = tree[2 * node] + tree[2 * node + 1];
   }
   int fi(int node, int start, int end, int id){
       push(node, start, end);
       if(start == end){
         return tree[node];
       }
       else{
          int mid = (start + end) / 2;
          if(mid >= id){
             return fi(2 * node, start, mid, id);
          }
          else{
            return fi(2 * node + 1, mid + 1, end, id);
          }
       }
   }
   
   
};
signed main(){
    int n, m;
    cin >> n >> m;
    vector<int> a(n);
    for(int i = 0; i < n; i++){
        cin >> a[i];
        a[i]--;
    }
    ST st(maxn);
    for(int i = 0; i < n - 1; i++){
       st.update(1, 0, maxn, min(a[i], a[i + 1]), max(a[i + 1], a[i]), 1);
    }
    while(m--){
        int u;
        cin >> u;
        if(u == 1){
            int q, w;
            cin >> q >> w;
            q--, w--;
            if(q > 0){
               st.update(1, 0, maxn, a[q - 1], a[q], -1);
               st.update(1, 0, maxn, a[q - 1], w, 1);
            }
            if(q < n - 1){
                st.update(1, 0, maxn, a[q], a[q + 1], -1);
                st.update(1, 0, maxn, w, a[q + 1], 1);
            }
            for(int i = 0; i < 10; i++){
                cout << st.fi(1, 0, maxn - 1, i) << " ";
            }
            return 0;
        }
        else{
            int q;
            cin >> q;
            q--;
            // cout << st.fi(1, 0, maxn, q) << endl;
            
        }

    }
    

}

컴파일 시 표준 에러 (stderr) 메시지

game.cpp: In member function 'long long int ST::push(long long int, long long int, long long int)':
game.cpp:39:4: warning: no return statement in function returning non-void [-Wreturn-type]
   39 |    }
      |    ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...