Submission #641557

# Submission time Handle Problem Language Result Execution time Memory
641557 2022-09-17T03:33:42 Z baojiaopisu Strange Device (APIO19_strange_device) C++14
5 / 100
1563 ms 94224 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 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 = 2e18;
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;
        bool lazy = 0;
        NODE() {
            left = right = nullptr;
            sum = lazy = 0;
        };
    };
    NODE* root = new NODE();
 
    SegmentTree(ll _n = 0) {
        n = _n;
    }
private:
    void Down(NODE* &node, const ll &L, const ll &R) {
        int x = node->lazy;
        ll mid = (L + R) / 2;
        if(!x) return;
        if(node->left != nullptr) {
            node->left->sum = (mid - L + 1);
            node->left->lazy = 1;
        }

        if(node->right != nullptr) {
            node->right->sum = (R - mid);
            node->right->lazy = 1;
        }
        node->lazy = 0;
    }
 
    void Update(ll L, ll R, const ll &lo, const 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) / 2;
        if(lo <= mid && node->left == nullptr) node->left = new NODE();
        if(hi > mid && node->right == nullptr) node->right = new NODE();
        Down(node, L, R);
        node->sum = 0;
        if(lo <= mid) Update(L, mid, lo, hi, node->left), node->sum += node->left->sum;
        if(hi > mid) Update(mid + 1, R, lo, hi, node->right), node->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;
}
 
int 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:174:17: warning: unused variable 'ddd' [-Wunused-variable]
  174 |     int tc = 1, ddd = 0;
      |                 ^~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 18 ms 3828 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 3 ms 1236 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1563 ms 94224 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1563 ms 94224 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1563 ms 94224 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 230 ms 63088 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 18 ms 3828 KB Output isn't correct
3 Halted 0 ms 0 KB -