답안 #641546

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
641546 2022-09-17T03:15:04 Z baojiaopisu 이상한 기계 (APIO19_strange_device) C++14
20 / 100
1586 ms 524288 KB
#include<bits/stdc++.h>

using namespace std;

using ll = long long;
using ld = long double;
using ull = unsigned long long;

using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pld = pair<ld, ld>;

#define int ll
#define fi first
#define se second
#define pb push_back
#define pf push_front
#define mp make_pair
#define ins insert
#define btpc __builtin_popcount
#define btclz __builtin_clz

#define sz(x) (int)(x.size());
#define all(x) x.begin(), x.end()
#define debug(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int d4x[4] = {1, 0, -1, 0}; int d4y[4] = {0, 1, 0, -1};
int d8x[8] = {0, 1, 1, 1, 0, -1, -1, -1};
int d8y[8] = {1, 1, 0, -1, -1, -1, 0, 1};

template<class X, class Y>
    bool minimize(X &x, const Y &y) {
        if (x > y)
        {
            x = y;
            return true;
        }
        return false;
    }
template<class X, class Y>
    bool maximize(X &x, const Y &y) {
        if (x < y)
        {
            x = y;
            return true;
        }
        return false;
    }

const int MOD = 1e9 + 7; //998244353

template<class X, class Y>
	void add(X &x, const Y &y) {
		x = (x + y);
		if(x >= MOD) x -= MOD;
	}

template<class X, class Y> 
	void sub(X &x, const Y &y) {
		x = (x - y);
		if(x < 0) x += MOD;
	}

/* Author : Le Ngoc Bao Anh, 12A5, LQD High School for Gifted Student*/

const ll INF = 5e18;
const int N = 1e5 + 10;

ll gcd(ll x, ll y) {
    if(y == 0) return x;
    return gcd(y, x % y);
}

struct SegmentTree {
    ll n;
    struct NODE {
        NODE* left;
        NODE* right;

        ll sum, lazy, L, R;
        NODE(ll _L = 1, ll _R = 1) {
            left = right = nullptr;
            sum = lazy = 0;
            L = _L, R = _R;
        };
    };
    NODE* root = new NODE();

    SegmentTree(ll _n = 0) {
        n = _n;
        root->L = 0;
        root->R = n;
    }
private:
    void Down(NODE* &node) {
        int x = node->lazy;
        ll mid = (node->L + node->R) / 2;
        if(!x) return;
        node->left->sum = (mid - node->L + 1);
        node->right->sum = (node->R - mid);
        node->left->lazy = node->right->lazy = 1;
        node->lazy = 0;
    }

    void Update(ll L, ll R, ll lo, ll hi, NODE* &node) {
        if(L > hi || R < lo) return;
        if(lo <= L && R <= hi) {
            node->sum = (R - L + 1);
            node->lazy = 1;
            return;
        }

        ll mid = (L + R) >> 1;
        if(node->left == nullptr) node->left = new NODE(L, mid);
        if(node->right == nullptr) node->right = new NODE(mid + 1, R);
        Down(node);
        Update(L, mid, lo, hi, node->left);
        Update(mid + 1, R, lo, hi, node->right);
        node->sum = node->left->sum + node->right->sum;
    }
public:
    void update(ll L, ll R) {
        if(L > R) return;
        Update(0, n, L, R, root);
    }
};

void solve() {
	int n; ll A, B; cin >> n >> A >> B;
    ll m = A / gcd(B + 1, A);
    if(INF / m < B) m = -1;
    else m = m * B;

    if(m == -1) m = INF;
    if(m > 1e18) {
        ll ans = 0;
        for(int i = 1; i <= n; i++) {
            ll L, R; cin >> L >> R;
            ans += R - L + 1;
        }
        cout << ans;
        return;
    }

    SegmentTree IT = SegmentTree(m + 5);
    for(int i = 1; i <= n; i++) {
        ll L, R; cin >> L >> R;
        if(R - L + 1 >= m) {
            cout << m;
            return;
        }

        ll l = L % m;
        if(l + (R - L) >= m) {
            IT.update(l, m - 1);
            L += (m - 1) - l;
            L++;
            IT.update(0, R - L);
        } else {
            IT.update(l, l + (R - L));
        }
    }

    cout << IT.root->sum;
}

signed main()
{

    int tc = 1, ddd = 0;
    // cin >> tc;
    while(tc--) {
        //ddd++;
        //cout << "Case #" << ddd << ": ";
        solve();
    }
}

Compilation message

strange_device.cpp: In function 'int main()':
strange_device.cpp:172:17: warning: unused variable 'ddd' [-Wunused-variable]
  172 |     int tc = 1, ddd = 0;
      |                 ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 21 ms 5344 KB Output is correct
3 Correct 20 ms 6548 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 468 KB Output is correct
16 Correct 18 ms 4860 KB Output is correct
17 Correct 157 ms 13316 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 3 ms 1748 KB Output is correct
3 Correct 3 ms 1748 KB Output is correct
4 Correct 3 ms 1620 KB Output is correct
5 Correct 1059 ms 284 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1586 ms 125680 KB Output is correct
3 Runtime error 917 ms 524288 KB Execution killed with signal 9
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1586 ms 125680 KB Output is correct
3 Runtime error 917 ms 524288 KB Execution killed with signal 9
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1586 ms 125680 KB Output is correct
3 Runtime error 917 ms 524288 KB Execution killed with signal 9
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 232 KB Output is correct
2 Correct 222 ms 84508 KB Output is correct
3 Correct 375 ms 197112 KB Output is correct
4 Runtime error 856 ms 524288 KB Execution killed with signal 9
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 21 ms 5344 KB Output is correct
3 Correct 20 ms 6548 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 468 KB Output is correct
16 Correct 18 ms 4860 KB Output is correct
17 Correct 157 ms 13316 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 0 ms 212 KB Output is correct
24 Correct 0 ms 212 KB Output is correct
25 Correct 3 ms 1748 KB Output is correct
26 Correct 3 ms 1748 KB Output is correct
27 Correct 3 ms 1620 KB Output is correct
28 Correct 1059 ms 284 KB Output is correct
29 Correct 0 ms 212 KB Output is correct
30 Correct 1586 ms 125680 KB Output is correct
31 Runtime error 917 ms 524288 KB Execution killed with signal 9
32 Halted 0 ms 0 KB -