답안 #1116819

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1116819 2024-11-22T12:29:30 Z Mher777 Simple game (IZhO17_game) C++17
100 / 100
142 ms 15444 KB
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <iomanip>
#include <array>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <bitset>
#include <list>
#include <iterator>
#include <numeric>
#include <complex>
#include <utility>
#include <random>
#include <cassert>
#include <fstream>
using namespace std;
mt19937 rnd(time(nullptr));

/* -------------------- Typedefs -------------------- */

typedef int itn;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef float fl;
typedef long double ld;

/* -------------------- Usings -------------------- */

using vi = vector<int>;
using vll = vector<ll>;
using mii = map<int, int>;
using mll = map<ll, ll>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

/* -------------------- Defines -------------------- */

#define ff first
#define ss second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define mpr make_pair
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define all(x) (x).begin(), (x).end()
#define USACO freopen("feast.in", "r", stdin); freopen("feast.out", "w", stdout);

/* -------------------- Constants -------------------- */

const int dx[8] = { -1, 0, 1, 0, -1, -1, 1, 1 };
const int dy[8] = { 0, -1, 0, 1, -1, 1, -1, 1 };
const int MAX = int(1e9 + 5);
const ll MAXL = ll(1e18) + 5ll;
const ll MOD = ll(1000000007);
const ll MOD2 = ll(998244353);

/* -------------------- Functions -------------------- */

void fastio() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}

void precision(int x) {
    cout.setf(ios::fixed | ios::showpoint);
    cout.precision(x);
}

ll gcd(ll a, ll b) {
    if (a == 0 || b == 0) return(max(a, b));
    while (b) {
        a %= b;
        swap(a, b);
    }
    return a;
}

ll lcm(ll a, ll b) {
    return a / gcd(a, b) * b;
}

ll range_sum(ll a, ll b) {
    if (a > b) return 0ll;
    ll dif = a - 1, cnt = b - a + 1;
    ll ans = ((b - a + 1) * (b - a + 2)) / 2;
    ans += ((b - a + 1) * dif);
    return ans;
}

string dec_to_bin(ll a) {
    string s = "";
    for (ll i = a; i > 0; ) {
        ll k = i % 2;
        i /= 2;
        char c = k + 48;
        s += c;
    }
    if (a == 0) {
        s = "0";
    }
    reverse(all(s));
    return s;
}

ll bin_to_dec(string s) {
    ll num = 0;
    for (int i = 0; i < s.size(); i++) {
        num *= 2ll;
        num += (s[i] - '0');
    }
    return num;
}

ll factorial_by_mod(ll n, ll mod) {
    ll ans = 1;
    ll num;
    for (ll i = 1; i <= n; ++i) {
        num = i % mod;
        ans *= num;
        ans %= mod;
    }
    return ans;
}

bool isPrime(ll a) {
    if (a == 1) return false;
    for (ll i = 2; i * i <= a; i++) {
        if (a % i == 0) return false;
    }
    return true;
}

ll binpow(ll a, ll b) {
    if (!a) return 0;
    ll ans = 1;
    while (b) {
        if (b & 1) {
            ans *= a;
        }
        b >>= 1;
        a *= a;
    }
    return ans;
}

ll binpow_by_mod(ll a, ll b, ll mod) {
    if (!a) return 0;
    ll ans = 1;
    while (b) {
        if (b & 1) {
            ans *= a;
            ans %= mod;
        }
        b >>= 1;
        a *= a;
        a %= mod;
    }
    return ans;
}

/* -------------------- Solution -------------------- */

const int N = 100005, M = 1000005;
int a[N], t[M * 4], par[M];
int n, q, m = 1e6;

void bld(int l = 1, int r = m, int pos = 1) {
    if (l == r) {
        par[l] = pos;
        return;
    }
    int mid = (l + r) / 2;
    bld(l, mid, 2 * pos);
    bld(mid + 1, r, 2 * pos + 1);
}

void upd(int l, int r, int val, int tl = 1, int tr = m, int pos = 1) {
    if (l == tl && r == tr) {
        t[pos] += val;
        return;
    }
    int mid = (tl + tr) / 2;
    if (mid >= r) {
        upd(l, r, val, tl, mid, 2 * pos);
    }
    else if (mid < l) {
        upd(l, r, val, mid + 1, tr, 2 * pos + 1);
    }
    else {
        upd(l, mid, val, tl, mid, 2 * pos);
        upd(mid + 1, r, val, mid + 1, tr, 2 * pos + 1);
    }
}

int get(int pos) {
    pos = par[pos];
    int ret = 0;
    while (pos) {
        ret += t[pos];
        pos /= 2;
    }
    return ret;
}

void upd1(int l, int r, int val) {
    if (l == 0 || r == n + 1) return;
    upd(min(a[l], a[r]), max(a[l], a[r]), val);
}

void slv() {
    cin >> n >> q;
    bld();
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        upd1(i - 1, i, 1);
    }
    while (q--) {
        int type;
        cin >> type;
        if (type == 2) {
            int h;
            cin >> h;
            cout << get(h) << '\n';
            continue;
        }
        int ind, val;
        cin >> ind >> val;
        upd1(ind - 1, ind, -1);
        upd1(ind, ind + 1, -1);
        a[ind] = val;
        upd1(ind - 1, ind, 1);
        upd1(ind, ind + 1, 1);
    }
}

void cs() {
    int tstc = 1;
    //cin >> tstc;
    while (tstc--) {
        slv();
    }
}

void precalc() {
    return;
}

int main() {
    fastio();
    precalc();
    //precision(0);
    cs();
    return 0;
}

Compilation message

game.cpp: In function 'll range_sum(ll, ll)':
game.cpp:97:21: warning: unused variable 'cnt' [-Wunused-variable]
   97 |     ll dif = a - 1, cnt = b - a + 1;
      |                     ^~~
game.cpp: In function 'll bin_to_dec(std::string)':
game.cpp:120:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  120 |     for (int i = 0; i < s.size(); i++) {
      |                     ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 8784 KB Output is correct
2 Correct 5 ms 12880 KB Output is correct
3 Correct 5 ms 12984 KB Output is correct
4 Correct 4 ms 12880 KB Output is correct
5 Correct 4 ms 12880 KB Output is correct
6 Correct 4 ms 12880 KB Output is correct
7 Correct 4 ms 4688 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 8784 KB Output is correct
2 Correct 5 ms 12880 KB Output is correct
3 Correct 5 ms 12984 KB Output is correct
4 Correct 4 ms 12880 KB Output is correct
5 Correct 4 ms 12880 KB Output is correct
6 Correct 4 ms 12880 KB Output is correct
7 Correct 4 ms 4688 KB Output is correct
8 Correct 28 ms 10064 KB Output is correct
9 Correct 66 ms 15372 KB Output is correct
10 Correct 59 ms 15432 KB Output is correct
11 Correct 31 ms 10056 KB Output is correct
12 Correct 45 ms 11080 KB Output is correct
13 Correct 28 ms 7072 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 8784 KB Output is correct
2 Correct 5 ms 12880 KB Output is correct
3 Correct 5 ms 12984 KB Output is correct
4 Correct 4 ms 12880 KB Output is correct
5 Correct 4 ms 12880 KB Output is correct
6 Correct 4 ms 12880 KB Output is correct
7 Correct 4 ms 4688 KB Output is correct
8 Correct 28 ms 10064 KB Output is correct
9 Correct 66 ms 15372 KB Output is correct
10 Correct 59 ms 15432 KB Output is correct
11 Correct 31 ms 10056 KB Output is correct
12 Correct 45 ms 11080 KB Output is correct
13 Correct 28 ms 7072 KB Output is correct
14 Correct 111 ms 15436 KB Output is correct
15 Correct 142 ms 15432 KB Output is correct
16 Correct 109 ms 15444 KB Output is correct
17 Correct 109 ms 15432 KB Output is correct
18 Correct 104 ms 15400 KB Output is correct