Submission #469160

# Submission time Handle Problem Language Result Execution time Memory
469160 2021-08-31T03:11:49 Z Cross_Ratio Strange Device (APIO19_strange_device) C++14
65 / 100
1077 ms 85416 KB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int gcd(int a, int b) {
    a = abs(a);
    b = abs(b);
    if(a < b) swap(a, b);
    while(b) {
        a %= b;
        swap(a, b);
    }
    return a;
}
vector<int> B;
int getidx(int n) {
    return lower_bound(B.begin(),B.end(),n) - B.begin();
}
struct SegTree {
    vector<int> seg;
    int MAX;
    SegTree(int N) {
        int i;
        for(i=2;i<2*N;i*=2) {}
        seg.resize(i);
        MAX = i;
    }
    int sum(int s, int e, int n, int ns, int ne) {
        if(e<=ns||ne<=s) return 0;
        if(s<=ns&&ne<=e) return seg[n];
        int mid = ns + ne >> 1;
        return sum(s, e, 2*n, ns, mid) + sum(s, e, 2*n+1, mid, ne);
    }
    void update(int n) {
        n += MAX/2;
        n /= 2;
        while(n) {
            seg[n] = seg[2*n] + seg[2*n+1];
            n /= 2;
        }
    }
    void Plus(int n) {
        seg[n+MAX/2]++;
        update(n);
    }
    void Minus(int n) {
        seg[n+MAX/2]--;
        update(n);
    }
    int sum(int s, int e) {
        return sum(s, e, 1, 0, MAX/2);
    }
};
int L[1000005];
int R[1000005];
main() {
    cin.sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int N, a, b;
    cin >> N >> a >> b;
    int d = gcd(a, b + 1);
    int c = a / d;
    int k = b * c;
    int l, r;

    int i;
    B.push_back(0);
    B.push_back(k);
    for(i=0;i<N;i++) {
        cin >> L[i] >> R[i];
        L[i] %= k;
        R[i] %= k;
        R[i]++;
        B.push_back(L[i]);
        B.push_back(R[i]);
    }
    sort(B.begin(),B.end());
    B.erase(unique(B.begin(),B.end()),B.end());
    SegTree tree(B.size() + 10);
    for(i=0;i<N;i++) {
        int l = getidx(L[i]);
        int r = getidx(R[i]);
        if(l < r) {
            tree.Plus(l);
            tree.Minus(r);
        }
        else {
            tree.Plus(0);
            tree.Minus(r);
            tree.Plus(l);
            tree.Minus(B.size()-1);
        }
    }
    int cnt = 0;
    for(i=0;i<B.size()-1;i++) {
        if(tree.sum(0,i+1)!=0) {
            cnt += B[i+1]-B[i];
        }
    }
    cout << cnt;
}

Compilation message

strange_device.cpp: In member function 'long long int SegTree::sum(long long int, long long int, long long int, long long int, long long int)':
strange_device.cpp:30:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   30 |         int mid = ns + ne >> 1;
      |                   ~~~^~~~
strange_device.cpp: At global scope:
strange_device.cpp:55:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   55 | main() {
      | ^~~~
strange_device.cpp: In function 'int main()':
strange_device.cpp:95:14: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |     for(i=0;i<B.size()-1;i++) {
      |             ~^~~~~~~~~~~
strange_device.cpp:64:9: warning: unused variable 'l' [-Wunused-variable]
   64 |     int l, r;
      |         ^
strange_device.cpp:64:12: warning: unused variable 'r' [-Wunused-variable]
   64 |     int l, r;
      |            ^
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 9 ms 1408 KB Output is correct
3 Correct 9 ms 1360 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 1 ms 204 KB Output is correct
12 Correct 1 ms 204 KB Output is correct
13 Correct 1 ms 332 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 1 ms 332 KB Output is correct
16 Correct 10 ms 1404 KB Output is correct
17 Correct 112 ms 8888 KB Output is correct
18 Correct 1 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Incorrect 1 ms 204 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 320 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 328 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 471 ms 50232 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 965 ms 73896 KB Output is correct
3 Correct 1002 ms 85280 KB Output is correct
4 Correct 950 ms 85384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 965 ms 73896 KB Output is correct
3 Correct 1002 ms 85280 KB Output is correct
4 Correct 950 ms 85384 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 946 ms 85336 KB Output is correct
7 Correct 929 ms 85416 KB Output is correct
8 Correct 995 ms 85244 KB Output is correct
9 Correct 1047 ms 85288 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 965 ms 73896 KB Output is correct
3 Correct 1002 ms 85280 KB Output is correct
4 Correct 950 ms 85384 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 90 ms 9360 KB Output is correct
7 Correct 95 ms 9264 KB Output is correct
8 Correct 89 ms 9360 KB Output is correct
9 Correct 91 ms 9260 KB Output is correct
10 Correct 105 ms 9352 KB Output is correct
11 Correct 92 ms 9356 KB Output is correct
12 Correct 86 ms 9276 KB Output is correct
13 Correct 95 ms 9284 KB Output is correct
14 Correct 104 ms 9276 KB Output is correct
15 Correct 97 ms 9268 KB Output is correct
16 Correct 102 ms 9352 KB Output is correct
17 Correct 91 ms 9332 KB Output is correct
18 Correct 948 ms 85356 KB Output is correct
19 Correct 995 ms 85284 KB Output is correct
20 Correct 1046 ms 83624 KB Output is correct
21 Correct 105 ms 9372 KB Output is correct
22 Correct 88 ms 9308 KB Output is correct
23 Correct 176 ms 23660 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 99 ms 8956 KB Output is correct
3 Correct 110 ms 8948 KB Output is correct
4 Correct 1059 ms 73804 KB Output is correct
5 Correct 96 ms 9268 KB Output is correct
6 Correct 98 ms 9244 KB Output is correct
7 Correct 96 ms 9344 KB Output is correct
8 Correct 94 ms 9288 KB Output is correct
9 Correct 97 ms 9344 KB Output is correct
10 Correct 95 ms 9280 KB Output is correct
11 Correct 98 ms 9480 KB Output is correct
12 Correct 89 ms 9352 KB Output is correct
13 Correct 97 ms 9316 KB Output is correct
14 Correct 1077 ms 69396 KB Output is correct
15 Correct 97 ms 9272 KB Output is correct
16 Correct 950 ms 68728 KB Output is correct
17 Correct 933 ms 68524 KB Output is correct
18 Correct 0 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 9 ms 1408 KB Output is correct
3 Correct 9 ms 1360 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 1 ms 204 KB Output is correct
12 Correct 1 ms 204 KB Output is correct
13 Correct 1 ms 332 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 1 ms 332 KB Output is correct
16 Correct 10 ms 1404 KB Output is correct
17 Correct 112 ms 8888 KB Output is correct
18 Correct 1 ms 204 KB Output is correct
19 Correct 1 ms 204 KB Output is correct
20 Incorrect 1 ms 204 KB Output isn't correct
21 Halted 0 ms 0 KB -