Submission #641554

#TimeUsernameProblemLanguageResultExecution timeMemory
641554baojiaopisuStrange Device (APIO19_strange_device)C++17
0 / 100
3 ms396 KiB
#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; node->left->sum = (mid - L + 1); node->right->sum = (R - mid); node->left->lazy = 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(node->left == nullptr) node->left = new NODE(); if(node->right == nullptr) node->right = new NODE(); Down(node, L, R); 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; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #else //online #endif int tc = 1, ddd = 0; // cin >> tc; while(tc--) { //ddd++; //cout << "Case #" << ddd << ": "; solve(); } }

Compilation message (stderr)

strange_device.cpp: In function 'int main()':
strange_device.cpp:176:17: warning: unused variable 'ddd' [-Wunused-variable]
  176 |     int tc = 1, ddd = 0;
      |                 ^~~
strange_device.cpp:170:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  170 |     freopen("input.txt", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
strange_device.cpp:171:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  171 |     freopen("output.txt", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...