답안 #928627

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
928627 2024-02-16T20:30:29 Z Mher777 원숭이와 사과 나무 (IZhO12_apple) C++17
100 / 100
163 ms 56064 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 <fstream>
using namespace std;
mt19937 rnd(6969);

/* -------------------- 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()

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

const int MAX = int(2e9 + 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) {
    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;
}

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

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 = 6000005;
int t[N], l1[N], r1[N], sz = 1, n = 1000000000;

void add(int pos) {
    if (!l1[pos]) l1[pos] = ++sz;
    if (!r1[pos]) r1[pos] = ++sz;
}

void push(int l, int r, int mid, int pos) {
    if (t[pos] != (r - l + 1)) return;
    t[l1[pos]] = mid - l + 1;
    t[r1[pos]] = r - mid;
}

void upd(int l, int r, int tl = 1, int tr = n, int pos = 1) {
    if (l == tl && r == tr) {
        t[pos] = (r - l + 1);
        return;
    }
    int mid = (tl + tr) / 2;
    add(pos);
    push(tl, tr, mid, pos);
    if (mid >= r) {
        upd(l, r, tl, mid, l1[pos]);
    }
    else if (mid < l) {
        upd(l, r, mid + 1, tr, r1[pos]);
    }
    else {
        upd(l, mid, tl, mid, l1[pos]);
        upd(mid + 1, r, mid + 1, tr, r1[pos]);
    }
    t[pos] = t[l1[pos]] + t[r1[pos]];
}

int qry(int l, int r, int tl = 1, int tr = n, int pos = 1) {
    if (l == tl && r == tr) {
        return t[pos];
    }
    int mid = (tl + tr) / 2;
    add(pos);
    push(tl, tr, mid, pos);
    if (mid >= r) {
        return qry(l, r, tl, mid, l1[pos]);
    }
    if (mid < l) {
        return qry(l, r, mid + 1, tr, r1[pos]);
    }
    return qry(l, mid, tl, mid, l1[pos]) + qry(mid + 1, r, mid + 1, tr, r1[pos]);
}

void slv() {
    int q;
    cin >> q;
    int c = 0;
    while (q--) {
        int type, l, r;
        cin >> type >> l >> r;
        l += c, r += c;
        if (type == 1) {
            c = qry(l, r);
            cout << c << '\n';
        }
        else {
            upd(l, r);
        }
    }
}

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

void precalc() {
    return;
}

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

Compilation message

apple.cpp: In function 'll range_sum(ll, ll)':
apple.cpp:92:21: warning: unused variable 'cnt' [-Wunused-variable]
   92 |     ll dif = a - 1, cnt = b - a + 1;
      |                     ^~~
apple.cpp: In function 'll bin_to_dec(std::string)':
apple.cpp:115:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  115 |     for (int i = 0; i < s.size(); i++) {
      |                     ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 6 ms 1544 KB Output is correct
5 Correct 8 ms 3676 KB Output is correct
6 Correct 8 ms 3792 KB Output is correct
7 Correct 8 ms 3796 KB Output is correct
8 Correct 44 ms 12380 KB Output is correct
9 Correct 107 ms 19960 KB Output is correct
10 Correct 103 ms 23268 KB Output is correct
11 Correct 109 ms 24148 KB Output is correct
12 Correct 107 ms 24692 KB Output is correct
13 Correct 108 ms 29344 KB Output is correct
14 Correct 99 ms 29440 KB Output is correct
15 Correct 140 ms 50892 KB Output is correct
16 Correct 140 ms 53152 KB Output is correct
17 Correct 109 ms 32176 KB Output is correct
18 Correct 101 ms 32340 KB Output is correct
19 Correct 163 ms 56004 KB Output is correct
20 Correct 150 ms 56064 KB Output is correct