Submission #1029949

# Submission time Handle Problem Language Result Execution time Memory
1029949 2024-07-21T14:27:06 Z yeediot Flooding Wall (BOI24_wall) C++17
70 / 100
385 ms 77880 KB
#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define pii pair<int,int>
#define pb push_back
#define sz(x) (int)(x.size())
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
#define vi vector<int>
#define vp vector<pii>
#define vvi vector<vi>
#define ykh mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count())
#define __lg(x) 63-__builtin_clzll(x)
#define pow2(x) (1LL<<x)
#ifdef local
void CHECK();
void setio(){
    freopen("/Users/iantsai/cpp/input.txt","r",stdin);
    freopen("/Users/iantsai/cpp/output.txt","w",stdout);
}
#else
void setio(){}
#endif
#define TOI_is_so_de ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);setio();
const int mxn = 5e5 + 105, mod = 1e9 + 7;
int n, a[mxn], b[mxn], pw[mxn], A[mxn], B[mxn];
#define s seg[id]
#define L seg[id * 2]
#define R seg[id * 2 + 1]
struct node{
    int val, tag;
};
vector<int>temp, v;
struct segment_tree{
    int tmr = 0;
    #ifdef local
    node seg[4000];
    #else
    node seg[4 * mxn];
    #endif
    void merge(int id){
        s.val = ((long long)L.val + R.val) % mod;
    }
    void build(int l, int r, int id){
        s.tag = 1;
        if(l == r){
            s.val = v[l];
            return;
        }
        int mm = l + r >> 1;
        build(l, mm, id * 2);
        build(mm + 1, r, id * 2 + 1);
        merge(id);
    }
    void push(int id, int l, int r){
        L.tag = (long long)L.tag * s.tag % mod;
        R.tag = (long long)R.tag * s.tag % mod;
        L.val = (long long)L.val * s.tag % mod;
        R.val = (long long)R.val * s.tag % mod;
        s.tag = 1;
    }
    void modify(int l, int r, int id, int ql, int qr, int v){
        if(s.tag == 0) return;
        if(qr < l or r < ql) return;
        if(ql <= l and r <= qr){
            s.val = (long long)s.val * v % mod;
            s.tag = (long long)s.tag * v % mod;
            return;
        }
        push(id, l, r);
        int mm = l + r >> 1;
        modify(l, mm, id * 2, ql, qr, v);
        modify(mm + 1, r, id * 2 + 1, ql, qr, v);
        merge(id);
    }
};
void solve(){
    cin >> n;
    pw[0] = 1;
    for(int i = 1; i <= n; i++){
        pw[i] = pw[i - 1] * 2 % mod;
    }
    for(int i = 1; i <= n; i++){
        cin >> a[i];
    }
    for(int i = 1; i <= n; i++){
        cin >> b[i];
        if(a[i] > b[i]) swap(a[i], b[i]);
        temp.pb(a[i]);
        temp.pb(b[i]);
    }
    temp.pb(1);
    temp.pb(0);
    temp.pb(mod);
    sort(all(temp));
    temp.resize(unique(all(temp))-temp.begin());
    int prev = 0;
    for(auto x : temp){
        v.pb(x - prev);
        prev = x;
    }
    for(int i = 1; i <= n; i++){
        A[i] = lower_bound(all(temp), a[i]) - temp.begin();
        B[i] = lower_bound(all(temp), b[i]) - temp.begin();
    }
    long long ans = 0;
    segment_tree t1;
    int N = sz(temp) - 1;
    t1.build(1, N, 1);
    for(int i = 1; i <= n; i++){
        t1.modify(1, N, 1, 1, A[i], 0);
        t1.modify(1, N, 1, B[i] + 1, N, 2);
        ans = (ans - (long long)t1.seg[1].val * pw[n - i] % mod) % mod;
    }
    t1.build(1, N, 1);
    for(int i = n; i >= 1; i--){
        t1.modify(1, N, 1, 1, A[i], 0);
        t1.modify(1, N, 1, B[i] + 1, N, 2);
        ans = (ans - (long long)t1.seg[1].val * pw[i - 1] % mod) % mod;
    }
    ans = ((long long)ans + (long long)n * t1.seg[1].val % mod);
    for(int i = 1; i <= n; i++){
        ans = ((long long)ans + pw[n - 1] * ((long long)b[i] - a[i] + (mod - b[i]) * 2LL % mod)) % mod;
    }
    if(ans < 0) ans += mod;
    cout << ans << '\n';
}
signed main(){
    TOI_is_so_de;
    int t = 1;
    while(t--){
        solve();
    }
}
/*
input:
 
*/

Compilation message

Main.cpp: In member function 'void segment_tree::build(int, int, int)':
Main.cpp:52:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   52 |         int mm = l + r >> 1;
      |                  ~~^~~
Main.cpp: In member function 'void segment_tree::modify(int, int, int, int, int, int)':
Main.cpp:73:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   73 |         int mm = l + r >> 1;
      |                  ~~^~~
# Verdict Execution time Memory Grader output
1 Correct 10 ms 24308 KB Output is correct
2 Correct 14 ms 24080 KB Output is correct
3 Correct 9 ms 24104 KB Output is correct
4 Correct 14 ms 24148 KB Output is correct
5 Correct 8 ms 24156 KB Output is correct
6 Correct 9 ms 24312 KB Output is correct
7 Correct 11 ms 24336 KB Output is correct
8 Correct 9 ms 24156 KB Output is correct
9 Correct 8 ms 24156 KB Output is correct
10 Correct 10 ms 24156 KB Output is correct
11 Correct 8 ms 24156 KB Output is correct
12 Correct 11 ms 24156 KB Output is correct
13 Correct 8 ms 24152 KB Output is correct
14 Correct 10 ms 24308 KB Output is correct
15 Correct 10 ms 24156 KB Output is correct
16 Correct 8 ms 24128 KB Output is correct
17 Correct 9 ms 24152 KB Output is correct
18 Correct 9 ms 24156 KB Output is correct
19 Correct 10 ms 24152 KB Output is correct
20 Correct 11 ms 24240 KB Output is correct
21 Correct 8 ms 24152 KB Output is correct
22 Correct 9 ms 24156 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 24156 KB Output is correct
2 Correct 10 ms 24156 KB Output is correct
3 Correct 9 ms 24308 KB Output is correct
4 Correct 9 ms 24156 KB Output is correct
5 Correct 8 ms 24156 KB Output is correct
6 Correct 15 ms 24156 KB Output is correct
7 Correct 11 ms 24172 KB Output is correct
8 Correct 9 ms 24152 KB Output is correct
9 Correct 8 ms 24144 KB Output is correct
10 Correct 9 ms 24152 KB Output is correct
11 Correct 9 ms 24152 KB Output is correct
12 Correct 8 ms 24156 KB Output is correct
13 Correct 10 ms 24156 KB Output is correct
14 Correct 9 ms 24320 KB Output is correct
15 Correct 10 ms 24156 KB Output is correct
16 Correct 9 ms 24156 KB Output is correct
17 Correct 10 ms 24092 KB Output is correct
18 Correct 9 ms 24152 KB Output is correct
19 Correct 10 ms 24156 KB Output is correct
20 Correct 9 ms 24308 KB Output is correct
21 Correct 9 ms 24408 KB Output is correct
22 Correct 10 ms 24152 KB Output is correct
23 Correct 9 ms 24256 KB Output is correct
24 Correct 11 ms 24156 KB Output is correct
25 Correct 10 ms 24312 KB Output is correct
26 Correct 10 ms 24156 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 24156 KB Output is correct
2 Correct 10 ms 24156 KB Output is correct
3 Correct 9 ms 24308 KB Output is correct
4 Correct 9 ms 24156 KB Output is correct
5 Correct 8 ms 24156 KB Output is correct
6 Correct 15 ms 24156 KB Output is correct
7 Correct 11 ms 24172 KB Output is correct
8 Correct 9 ms 24152 KB Output is correct
9 Correct 8 ms 24144 KB Output is correct
10 Correct 9 ms 24152 KB Output is correct
11 Correct 9 ms 24152 KB Output is correct
12 Correct 8 ms 24156 KB Output is correct
13 Correct 10 ms 24156 KB Output is correct
14 Correct 9 ms 24320 KB Output is correct
15 Correct 10 ms 24156 KB Output is correct
16 Correct 9 ms 24156 KB Output is correct
17 Correct 10 ms 24092 KB Output is correct
18 Correct 9 ms 24152 KB Output is correct
19 Correct 10 ms 24156 KB Output is correct
20 Correct 9 ms 24308 KB Output is correct
21 Correct 9 ms 24408 KB Output is correct
22 Correct 10 ms 24152 KB Output is correct
23 Correct 9 ms 24256 KB Output is correct
24 Correct 11 ms 24156 KB Output is correct
25 Correct 10 ms 24312 KB Output is correct
26 Correct 10 ms 24156 KB Output is correct
27 Correct 13 ms 24412 KB Output is correct
28 Correct 15 ms 24664 KB Output is correct
29 Correct 11 ms 24408 KB Output is correct
30 Correct 11 ms 24408 KB Output is correct
31 Correct 11 ms 24412 KB Output is correct
32 Correct 12 ms 24412 KB Output is correct
33 Correct 11 ms 24408 KB Output is correct
34 Correct 11 ms 24388 KB Output is correct
35 Correct 13 ms 24584 KB Output is correct
36 Correct 11 ms 24412 KB Output is correct
37 Correct 10 ms 24612 KB Output is correct
38 Correct 16 ms 24412 KB Output is correct
39 Correct 18 ms 24432 KB Output is correct
40 Correct 13 ms 24412 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 24308 KB Output is correct
2 Correct 14 ms 24080 KB Output is correct
3 Correct 9 ms 24104 KB Output is correct
4 Correct 14 ms 24148 KB Output is correct
5 Correct 8 ms 24156 KB Output is correct
6 Correct 9 ms 24312 KB Output is correct
7 Correct 11 ms 24336 KB Output is correct
8 Correct 9 ms 24156 KB Output is correct
9 Correct 8 ms 24156 KB Output is correct
10 Correct 10 ms 24156 KB Output is correct
11 Correct 8 ms 24156 KB Output is correct
12 Correct 11 ms 24156 KB Output is correct
13 Correct 8 ms 24152 KB Output is correct
14 Correct 10 ms 24308 KB Output is correct
15 Correct 10 ms 24156 KB Output is correct
16 Correct 8 ms 24128 KB Output is correct
17 Correct 9 ms 24152 KB Output is correct
18 Correct 9 ms 24156 KB Output is correct
19 Correct 10 ms 24152 KB Output is correct
20 Correct 11 ms 24240 KB Output is correct
21 Correct 8 ms 24152 KB Output is correct
22 Correct 9 ms 24156 KB Output is correct
23 Correct 10 ms 24156 KB Output is correct
24 Correct 10 ms 24156 KB Output is correct
25 Correct 9 ms 24308 KB Output is correct
26 Correct 9 ms 24156 KB Output is correct
27 Correct 8 ms 24156 KB Output is correct
28 Correct 15 ms 24156 KB Output is correct
29 Correct 11 ms 24172 KB Output is correct
30 Correct 9 ms 24152 KB Output is correct
31 Correct 8 ms 24144 KB Output is correct
32 Correct 9 ms 24152 KB Output is correct
33 Correct 9 ms 24152 KB Output is correct
34 Correct 8 ms 24156 KB Output is correct
35 Correct 10 ms 24156 KB Output is correct
36 Correct 9 ms 24320 KB Output is correct
37 Correct 10 ms 24156 KB Output is correct
38 Correct 9 ms 24156 KB Output is correct
39 Correct 10 ms 24092 KB Output is correct
40 Correct 9 ms 24152 KB Output is correct
41 Correct 10 ms 24156 KB Output is correct
42 Correct 9 ms 24308 KB Output is correct
43 Correct 9 ms 24408 KB Output is correct
44 Correct 10 ms 24152 KB Output is correct
45 Correct 9 ms 24256 KB Output is correct
46 Correct 11 ms 24156 KB Output is correct
47 Correct 10 ms 24312 KB Output is correct
48 Correct 10 ms 24156 KB Output is correct
49 Correct 13 ms 24412 KB Output is correct
50 Correct 15 ms 24664 KB Output is correct
51 Correct 11 ms 24408 KB Output is correct
52 Correct 11 ms 24408 KB Output is correct
53 Correct 11 ms 24412 KB Output is correct
54 Correct 12 ms 24412 KB Output is correct
55 Correct 11 ms 24408 KB Output is correct
56 Correct 11 ms 24388 KB Output is correct
57 Correct 13 ms 24584 KB Output is correct
58 Correct 11 ms 24412 KB Output is correct
59 Correct 10 ms 24612 KB Output is correct
60 Correct 16 ms 24412 KB Output is correct
61 Correct 18 ms 24432 KB Output is correct
62 Correct 13 ms 24412 KB Output is correct
63 Correct 17 ms 24788 KB Output is correct
64 Correct 14 ms 24668 KB Output is correct
65 Correct 12 ms 24664 KB Output is correct
66 Correct 14 ms 24412 KB Output is correct
67 Correct 14 ms 24616 KB Output is correct
68 Correct 12 ms 24616 KB Output is correct
69 Correct 20 ms 24688 KB Output is correct
70 Correct 17 ms 24668 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 9 ms 24156 KB Output is correct
2 Correct 15 ms 24156 KB Output is correct
3 Correct 11 ms 24156 KB Output is correct
4 Correct 9 ms 24156 KB Output is correct
5 Correct 8 ms 24152 KB Output is correct
6 Correct 9 ms 24316 KB Output is correct
7 Correct 10 ms 24156 KB Output is correct
8 Correct 9 ms 24152 KB Output is correct
9 Correct 11 ms 24156 KB Output is correct
10 Correct 12 ms 24412 KB Output is correct
11 Correct 11 ms 24616 KB Output is correct
12 Correct 12 ms 24412 KB Output is correct
13 Correct 11 ms 24408 KB Output is correct
14 Correct 137 ms 31748 KB Output is correct
15 Correct 133 ms 31776 KB Output is correct
16 Correct 107 ms 31660 KB Output is correct
17 Correct 113 ms 31704 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 24308 KB Output is correct
2 Correct 14 ms 24080 KB Output is correct
3 Correct 9 ms 24104 KB Output is correct
4 Correct 14 ms 24148 KB Output is correct
5 Correct 8 ms 24156 KB Output is correct
6 Correct 9 ms 24312 KB Output is correct
7 Correct 11 ms 24336 KB Output is correct
8 Correct 9 ms 24156 KB Output is correct
9 Correct 8 ms 24156 KB Output is correct
10 Correct 10 ms 24156 KB Output is correct
11 Correct 8 ms 24156 KB Output is correct
12 Correct 11 ms 24156 KB Output is correct
13 Correct 8 ms 24152 KB Output is correct
14 Correct 10 ms 24308 KB Output is correct
15 Correct 10 ms 24156 KB Output is correct
16 Correct 8 ms 24128 KB Output is correct
17 Correct 9 ms 24152 KB Output is correct
18 Correct 9 ms 24156 KB Output is correct
19 Correct 10 ms 24152 KB Output is correct
20 Correct 11 ms 24240 KB Output is correct
21 Correct 8 ms 24152 KB Output is correct
22 Correct 9 ms 24156 KB Output is correct
23 Correct 10 ms 24156 KB Output is correct
24 Correct 10 ms 24156 KB Output is correct
25 Correct 9 ms 24308 KB Output is correct
26 Correct 9 ms 24156 KB Output is correct
27 Correct 8 ms 24156 KB Output is correct
28 Correct 15 ms 24156 KB Output is correct
29 Correct 11 ms 24172 KB Output is correct
30 Correct 9 ms 24152 KB Output is correct
31 Correct 8 ms 24144 KB Output is correct
32 Correct 9 ms 24152 KB Output is correct
33 Correct 9 ms 24152 KB Output is correct
34 Correct 8 ms 24156 KB Output is correct
35 Correct 10 ms 24156 KB Output is correct
36 Correct 9 ms 24320 KB Output is correct
37 Correct 10 ms 24156 KB Output is correct
38 Correct 9 ms 24156 KB Output is correct
39 Correct 10 ms 24092 KB Output is correct
40 Correct 9 ms 24152 KB Output is correct
41 Correct 10 ms 24156 KB Output is correct
42 Correct 9 ms 24308 KB Output is correct
43 Correct 9 ms 24408 KB Output is correct
44 Correct 10 ms 24152 KB Output is correct
45 Correct 9 ms 24256 KB Output is correct
46 Correct 11 ms 24156 KB Output is correct
47 Correct 10 ms 24312 KB Output is correct
48 Correct 10 ms 24156 KB Output is correct
49 Correct 13 ms 24412 KB Output is correct
50 Correct 15 ms 24664 KB Output is correct
51 Correct 11 ms 24408 KB Output is correct
52 Correct 11 ms 24408 KB Output is correct
53 Correct 11 ms 24412 KB Output is correct
54 Correct 12 ms 24412 KB Output is correct
55 Correct 11 ms 24408 KB Output is correct
56 Correct 11 ms 24388 KB Output is correct
57 Correct 13 ms 24584 KB Output is correct
58 Correct 11 ms 24412 KB Output is correct
59 Correct 10 ms 24612 KB Output is correct
60 Correct 16 ms 24412 KB Output is correct
61 Correct 18 ms 24432 KB Output is correct
62 Correct 13 ms 24412 KB Output is correct
63 Correct 17 ms 24788 KB Output is correct
64 Correct 14 ms 24668 KB Output is correct
65 Correct 12 ms 24664 KB Output is correct
66 Correct 14 ms 24412 KB Output is correct
67 Correct 14 ms 24616 KB Output is correct
68 Correct 12 ms 24616 KB Output is correct
69 Correct 20 ms 24688 KB Output is correct
70 Correct 17 ms 24668 KB Output is correct
71 Correct 9 ms 24156 KB Output is correct
72 Correct 15 ms 24156 KB Output is correct
73 Correct 11 ms 24156 KB Output is correct
74 Correct 9 ms 24156 KB Output is correct
75 Correct 8 ms 24152 KB Output is correct
76 Correct 9 ms 24316 KB Output is correct
77 Correct 10 ms 24156 KB Output is correct
78 Correct 9 ms 24152 KB Output is correct
79 Correct 11 ms 24156 KB Output is correct
80 Correct 12 ms 24412 KB Output is correct
81 Correct 11 ms 24616 KB Output is correct
82 Correct 12 ms 24412 KB Output is correct
83 Correct 11 ms 24408 KB Output is correct
84 Correct 137 ms 31748 KB Output is correct
85 Correct 133 ms 31776 KB Output is correct
86 Correct 107 ms 31660 KB Output is correct
87 Correct 113 ms 31704 KB Output is correct
88 Runtime error 385 ms 77880 KB Execution killed with signal 11
89 Halted 0 ms 0 KB -