Submission #739369

# Submission time Handle Problem Language Result Execution time Memory
739369 2023-05-10T11:11:34 Z nguyentunglam Street Lamps (APIO19_street_lamps) C++17
100 / 100
2338 ms 105788 KB
#include<bits/stdc++.h>
#define fi first
#define se second
#define endl "\n"
#define ii pair<int, int>
using namespace std;
const int N = 3e5 + 10;
int a[N], ans[N];
int n, q;
tuple<int, int, int> query[N];
pair<int, int> tt[N];
vector<int> node[N], bit[N];
void fakeup (int x, int y) {
    for(x; x <= n; x += x & -x) node[x].push_back(y);
}
void up(int x, int yy, int val) {
    if (yy > n) return;
    for(x; x <= n; x += x & -x) {
        for(int y = upper_bound(node[x].begin(), node[x].end(), yy) - node[x].begin(); y <= node[x].size(); y += y & -y) {
            bit[x][y] += val;
        }
    }
}
int get(int x, int yy) {
    int ret = 0;
    for(x; x; x -= x & -x) {
        for(int y = upper_bound(node[x].begin(), node[x].end(), yy) - node[x].begin(); y; y -= y & -y) {
            ret += bit[x][y];
        }
    }
    return ret;
}
void compress() {
    for(int i = 1; i <= n; i++) {
        sort(node[i].begin(), node[i].end());
        node[i].resize(unique(node[i].begin(), node[i].end()) - node[i].begin());
        bit[i].resize(node[i].size() + 1);
    }
}
void fakeinc(int x, int y, int u, int v) {
    fakeup(x, y);
    fakeup(x, v + 1);
    fakeup(u + 1, y);
    fakeup(u + 1, v + 1);
}
void inc(int x, int y, int u, int v, int val) {
    up(x, y, val);
    up(x, v + 1, -val);
    up(u + 1, y, -val);
    up(u + 1, v + 1, val);
}
int main() {
    #define task ""
    cin.tie(0) -> sync_with_stdio(0);
    if (fopen ("task.inp", "r")) {
        freopen ("task.inp", "r", stdin);
        freopen ("task.out", "w", stdout);
    }
    if (fopen (task".inp", "r")) {
        freopen (task".inp", "r", stdin);
        freopen (task".out", "w", stdout);
    }
    cin >> n >> q;
    string str; cin >> str; str = " " + str;
    set<int> s = {0, n + 1};
    for(int i = 1; i <= n; i++) {
        a[i] = str[i] - '0';
        if (!a[i]) s.insert(i);
    }
    for(int timer = 1; timer <= q; timer++) {
        string ask; cin >> ask;
        if (ask[0] == 't') {
            int i; cin >> i;
            a[i] ^= 1;
            if (a[i]) s.erase(s.find(i));
            else s.insert(i);
            auto it = s.upper_bound(i);
            int r = *it - 1;
            it--;
            if (*it == i) it--;
            int l = *it + 1;
            fakeinc(l, i, i, r);
            query[timer] = {0, l, r};
            tt[timer].fi = i;
            tt[timer].se = a[i] ? -timer : timer;
        }
        else {
            int l, r; cin >> l >> r; r--;
            query[timer] = {1, l, r};
            if (*s.lower_bound(l) > r) ans[timer] += timer;
        }
    }
    compress();
    for(int timer = 1; timer <= q; timer++) {
        int type, l, r; tie(type, l, r) = query[timer];
        if (type == 0) {
            int i, val; tie(i, val) = tt[timer];
            inc(l, i, i, r, val);
        }
        else cout << get(l, r) + ans[timer] << endl;
    }
}

Compilation message

street_lamps.cpp: In function 'void fakeup(int, int)':
street_lamps.cpp:14:9: warning: statement has no effect [-Wunused-value]
   14 |     for(x; x <= n; x += x & -x) node[x].push_back(y);
      |         ^
street_lamps.cpp: In function 'void up(int, int, int)':
street_lamps.cpp:18:9: warning: statement has no effect [-Wunused-value]
   18 |     for(x; x <= n; x += x & -x) {
      |         ^
street_lamps.cpp:19:90: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |         for(int y = upper_bound(node[x].begin(), node[x].end(), yy) - node[x].begin(); y <= node[x].size(); y += y & -y) {
      |                                                                                        ~~^~~~~~~~~~~~~~~~~
street_lamps.cpp: In function 'int get(int, int)':
street_lamps.cpp:26:9: warning: statement has no effect [-Wunused-value]
   26 |     for(x; x; x -= x & -x) {
      |         ^
street_lamps.cpp: In function 'int main()':
street_lamps.cpp:56:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   56 |         freopen ("task.inp", "r", stdin);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
street_lamps.cpp:57:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   57 |         freopen ("task.out", "w", stdout);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
street_lamps.cpp:60:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   60 |         freopen (task".inp", "r", stdin);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
street_lamps.cpp:61:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   61 |         freopen (task".out", "w", stdout);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 7 ms 14420 KB Output is correct
2 Correct 7 ms 14420 KB Output is correct
3 Correct 7 ms 14396 KB Output is correct
4 Correct 9 ms 14460 KB Output is correct
5 Correct 7 ms 14420 KB Output is correct
6 Correct 7 ms 14420 KB Output is correct
7 Correct 7 ms 14420 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 227 ms 33128 KB Output is correct
2 Correct 311 ms 34788 KB Output is correct
3 Correct 518 ms 41144 KB Output is correct
4 Correct 1379 ms 77868 KB Output is correct
5 Correct 1132 ms 63416 KB Output is correct
6 Correct 1527 ms 84860 KB Output is correct
7 Correct 347 ms 43552 KB Output is correct
8 Correct 127 ms 31940 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 9 ms 14672 KB Output is correct
2 Correct 9 ms 14548 KB Output is correct
3 Correct 9 ms 14548 KB Output is correct
4 Correct 10 ms 14420 KB Output is correct
5 Correct 2338 ms 100304 KB Output is correct
6 Correct 1786 ms 84768 KB Output is correct
7 Correct 1121 ms 61872 KB Output is correct
8 Correct 125 ms 31952 KB Output is correct
9 Correct 74 ms 19216 KB Output is correct
10 Correct 79 ms 19652 KB Output is correct
11 Correct 80 ms 19632 KB Output is correct
12 Correct 311 ms 43492 KB Output is correct
13 Correct 136 ms 32048 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 14420 KB Output is correct
2 Correct 9 ms 14548 KB Output is correct
3 Correct 9 ms 14568 KB Output is correct
4 Correct 10 ms 14548 KB Output is correct
5 Correct 319 ms 37404 KB Output is correct
6 Correct 907 ms 62092 KB Output is correct
7 Correct 1503 ms 83632 KB Output is correct
8 Correct 2275 ms 105788 KB Output is correct
9 Correct 386 ms 43416 KB Output is correct
10 Correct 345 ms 41184 KB Output is correct
11 Correct 402 ms 43780 KB Output is correct
12 Correct 350 ms 41580 KB Output is correct
13 Correct 401 ms 43672 KB Output is correct
14 Correct 351 ms 41644 KB Output is correct
15 Correct 331 ms 43404 KB Output is correct
16 Correct 133 ms 31884 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 14420 KB Output is correct
2 Correct 7 ms 14420 KB Output is correct
3 Correct 7 ms 14396 KB Output is correct
4 Correct 9 ms 14460 KB Output is correct
5 Correct 7 ms 14420 KB Output is correct
6 Correct 7 ms 14420 KB Output is correct
7 Correct 7 ms 14420 KB Output is correct
8 Correct 227 ms 33128 KB Output is correct
9 Correct 311 ms 34788 KB Output is correct
10 Correct 518 ms 41144 KB Output is correct
11 Correct 1379 ms 77868 KB Output is correct
12 Correct 1132 ms 63416 KB Output is correct
13 Correct 1527 ms 84860 KB Output is correct
14 Correct 347 ms 43552 KB Output is correct
15 Correct 127 ms 31940 KB Output is correct
16 Correct 9 ms 14672 KB Output is correct
17 Correct 9 ms 14548 KB Output is correct
18 Correct 9 ms 14548 KB Output is correct
19 Correct 10 ms 14420 KB Output is correct
20 Correct 2338 ms 100304 KB Output is correct
21 Correct 1786 ms 84768 KB Output is correct
22 Correct 1121 ms 61872 KB Output is correct
23 Correct 125 ms 31952 KB Output is correct
24 Correct 74 ms 19216 KB Output is correct
25 Correct 79 ms 19652 KB Output is correct
26 Correct 80 ms 19632 KB Output is correct
27 Correct 311 ms 43492 KB Output is correct
28 Correct 136 ms 32048 KB Output is correct
29 Correct 8 ms 14420 KB Output is correct
30 Correct 9 ms 14548 KB Output is correct
31 Correct 9 ms 14568 KB Output is correct
32 Correct 10 ms 14548 KB Output is correct
33 Correct 319 ms 37404 KB Output is correct
34 Correct 907 ms 62092 KB Output is correct
35 Correct 1503 ms 83632 KB Output is correct
36 Correct 2275 ms 105788 KB Output is correct
37 Correct 386 ms 43416 KB Output is correct
38 Correct 345 ms 41184 KB Output is correct
39 Correct 402 ms 43780 KB Output is correct
40 Correct 350 ms 41580 KB Output is correct
41 Correct 401 ms 43672 KB Output is correct
42 Correct 351 ms 41644 KB Output is correct
43 Correct 331 ms 43404 KB Output is correct
44 Correct 133 ms 31884 KB Output is correct
45 Correct 103 ms 24152 KB Output is correct
46 Correct 165 ms 25960 KB Output is correct
47 Correct 706 ms 45652 KB Output is correct
48 Correct 1358 ms 76436 KB Output is correct
49 Correct 81 ms 19920 KB Output is correct
50 Correct 83 ms 19960 KB Output is correct
51 Correct 83 ms 19792 KB Output is correct
52 Correct 89 ms 19508 KB Output is correct
53 Correct 85 ms 19248 KB Output is correct
54 Correct 81 ms 19664 KB Output is correct