Submission #565286

# Submission time Handle Problem Language Result Execution time Memory
565286 2022-05-20T15:28:03 Z dantoh000 Two Dishes (JOI19_dishes) C++14
8 / 100
426 ms 105460 KB
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int INF = 1000000000000000000;
int n,m;
int a[200005], s[200005], p[200005];
int b[200005], t[200005], q[200005];
int pa[200005], pb[200005];
map<int, int> M[200005];
struct node{
    int s,e,m,v;
    int la, lu, marked;
    node *l, *r;
    node (int _s, int _e){
        s = _s, e = _e, m = (s+e)/2;
        v = 0;
        la = lu = 0;
        if (s != e){
            l = new node(s,m);
            r = new node(m+1,e);
        }
    }
    void prop(){
        if (marked){
            v = lu;
            if (s != e){
                l->lu = lu;
                r->lu = lu;
                l->marked = r->marked = true;
                l->la = r->la = 0;
            }
            marked = lu = 0;
        }
        if (la){
            v += la;
            if (s != e){
                l->la += la;
                r->la += la;
            }
            la = 0;
        }

    }
    void SET(int qs, int qe, int nv){
        prop();
        if (qs == s && qe == e){
            marked = true;
            lu = nv;
            la = 0;
            return;
        }
        if (qs > m) r->SET(qs,qe,nv);
        else if (qe <= m) l->SET(qs,qe,nv);
        else{
            l->SET(qs,m,nv);
            r->SET(m+1,qe,nv);
        }
        l->prop();
        r->prop();
        v = max(l->v, r->v);
    }
    void ADD(int qs, int qe, int nv){
        prop();
        if (qs == s && qe == e){
            la += nv;
            return;
        }
        if (qs > m) r->ADD(qs,qe,nv);
        else if (qe <= m) l->ADD(qs,qe,nv);
        else{
            l->ADD(qs,m,nv);
            r->ADD(m+1,qe,nv);
        }
        l->prop();
        r->prop();
        v = max(l->v, r->v);
    }
    int qu(int x){
        prop();
        if (s == e) return v;
        if (x > m) return r->qu(x);
        else return l->qu(x);
    }
    int fin(int x){
        prop();
        //printf("finding first element > %d, cur %d %d\n",x,s,e);
        if (s == e) {
            if (v <= x) return e+1;
            else return e;
        }
        if (l->v > x) return l->fin(x);
        else return r->fin(x);
    }
} *root;
void update(int l, int r, int v){
    if (v == 0) return;
    if (l == 0){
        root->ADD(l, r, v);
        //printf("ADDING %d %d to %d\n",l,r,v);
        return;
    }
    int val = root->qu(l-1);
    int ID2 = max(l, min(r+1, root->fin(val-v)));
    //printf("ID2 = %d: finding %d: --> %d\n",ID2, val-v, root->fin(val-v));
    if (l <= ID2-1){
        root->SET(l, ID2-1, val);
        //printf("SETTING %d %d to %d\n",l,ID2-1,val);
    }
    if (ID2 <= r){
        root->ADD(ID2, r, v);
        //printf("ADDING %d %d to %d\n",ID2,r,v);
    }
}
main(){
    scanf("%lld%lld",&n,&m);
    for (int i = 1; i <= n; i++){
        scanf("%lld%lld%lld",&a[i],&s[i],&p[i]);
        pa[i] = pa[i-1] + a[i];
    }
    for (int i = 1; i <= m; i++){
        scanf("%lld%lld%lld",&b[i],&t[i],&q[i]);
        pb[i] = pb[i-1] + b[i];
    }

    for (int i = 1; i <= n; i++){
        int Ta = upper_bound(pb, pb+m+1, s[i]-pa[i])-pb-1;
        //printf("A row %d needs col <= %d\n",i,Ta);
        if (Ta != -1) {
            M[i][0] += p[i];
            M[i][Ta+1] -= p[i];
            //printf("%d %d +%d\n",i,0,p[i]);
            //printf("%d %d -%d\n",i,Ta+1,p[i]);
        }

    }
    for (int i = 1; i <= m; i++){
        int Tb = upper_bound(pa, pa+n+1, t[i]-pb[i])-pa-1;
        //printf("B col %d needs row <= %d\n",i,Tb);
        if (Tb != -1) {
            M[Tb+1][i] += q[i];
            //printf("%d %d +%d\n",Tb+1,i,q[i]);
        }

    }
    root = new node(0, m);
    int ans = 0;
    for (int i = 0; i <= n+1; i++){
        //printf("at %d\n",i);
        for (auto it = M[i].rbegin(); it != M[i].rend(); it++){
            int id, v;
            tie(id,v) = *it;
            //printf("updating %d %d %d\n",id,m,v);
            update(id, m, v);
        }
        for (int i = 0; i <= m; i++){
            //printf("%d ",root->qu(i));
        }
        //printf("\n");
    }
    printf("%lld\n",root->qu(m));



}

Compilation message

dishes.cpp:114:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  114 | main(){
      | ^~~~
dishes.cpp: In function 'int main()':
dishes.cpp:146:9: warning: unused variable 'ans' [-Wunused-variable]
  146 |     int ans = 0;
      |         ^~~
dishes.cpp:115:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  115 |     scanf("%lld%lld",&n,&m);
      |     ~~~~~^~~~~~~~~~~~~~~~~~
dishes.cpp:117:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  117 |         scanf("%lld%lld%lld",&a[i],&s[i],&p[i]);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dishes.cpp:121:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  121 |         scanf("%lld%lld%lld",&b[i],&t[i],&q[i]);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 396 ms 93348 KB Output is correct
2 Correct 426 ms 96560 KB Output is correct
3 Correct 416 ms 104500 KB Output is correct
4 Correct 296 ms 82636 KB Output is correct
5 Correct 5 ms 9684 KB Output is correct
6 Correct 405 ms 94840 KB Output is correct
7 Correct 238 ms 65432 KB Output is correct
8 Correct 134 ms 47924 KB Output is correct
9 Correct 413 ms 105460 KB Output is correct
10 Correct 324 ms 85940 KB Output is correct
11 Correct 395 ms 98764 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 9684 KB Output is correct
2 Correct 5 ms 9712 KB Output is correct
3 Correct 5 ms 9704 KB Output is correct
4 Correct 4 ms 9708 KB Output is correct
5 Correct 5 ms 9684 KB Output is correct
6 Correct 6 ms 9704 KB Output is correct
7 Correct 5 ms 9684 KB Output is correct
8 Correct 5 ms 9684 KB Output is correct
9 Correct 5 ms 9704 KB Output is correct
10 Correct 5 ms 9684 KB Output is correct
11 Correct 6 ms 9708 KB Output is correct
12 Correct 5 ms 9652 KB Output is correct
13 Correct 5 ms 9684 KB Output is correct
14 Correct 5 ms 9684 KB Output is correct
15 Correct 6 ms 9708 KB Output is correct
16 Correct 5 ms 9648 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 9684 KB Output is correct
2 Correct 5 ms 9712 KB Output is correct
3 Correct 5 ms 9704 KB Output is correct
4 Correct 4 ms 9708 KB Output is correct
5 Correct 5 ms 9684 KB Output is correct
6 Correct 6 ms 9704 KB Output is correct
7 Correct 5 ms 9684 KB Output is correct
8 Correct 5 ms 9684 KB Output is correct
9 Correct 5 ms 9704 KB Output is correct
10 Correct 5 ms 9684 KB Output is correct
11 Correct 6 ms 9708 KB Output is correct
12 Correct 5 ms 9652 KB Output is correct
13 Correct 5 ms 9684 KB Output is correct
14 Correct 5 ms 9684 KB Output is correct
15 Correct 6 ms 9708 KB Output is correct
16 Correct 5 ms 9648 KB Output is correct
17 Correct 10 ms 10556 KB Output is correct
18 Correct 8 ms 10452 KB Output is correct
19 Incorrect 10 ms 10580 KB Output isn't correct
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 9684 KB Output is correct
2 Correct 5 ms 9712 KB Output is correct
3 Correct 5 ms 9704 KB Output is correct
4 Correct 4 ms 9708 KB Output is correct
5 Correct 5 ms 9684 KB Output is correct
6 Correct 6 ms 9704 KB Output is correct
7 Correct 5 ms 9684 KB Output is correct
8 Correct 5 ms 9684 KB Output is correct
9 Correct 5 ms 9704 KB Output is correct
10 Correct 5 ms 9684 KB Output is correct
11 Correct 6 ms 9708 KB Output is correct
12 Correct 5 ms 9652 KB Output is correct
13 Correct 5 ms 9684 KB Output is correct
14 Correct 5 ms 9684 KB Output is correct
15 Correct 6 ms 9708 KB Output is correct
16 Correct 5 ms 9648 KB Output is correct
17 Correct 10 ms 10556 KB Output is correct
18 Correct 8 ms 10452 KB Output is correct
19 Incorrect 10 ms 10580 KB Output isn't correct
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 9684 KB Output is correct
2 Correct 5 ms 9712 KB Output is correct
3 Correct 5 ms 9704 KB Output is correct
4 Correct 4 ms 9708 KB Output is correct
5 Correct 5 ms 9684 KB Output is correct
6 Correct 6 ms 9704 KB Output is correct
7 Correct 5 ms 9684 KB Output is correct
8 Correct 5 ms 9684 KB Output is correct
9 Correct 5 ms 9704 KB Output is correct
10 Correct 5 ms 9684 KB Output is correct
11 Correct 6 ms 9708 KB Output is correct
12 Correct 5 ms 9652 KB Output is correct
13 Correct 5 ms 9684 KB Output is correct
14 Correct 5 ms 9684 KB Output is correct
15 Correct 6 ms 9708 KB Output is correct
16 Correct 5 ms 9648 KB Output is correct
17 Correct 10 ms 10556 KB Output is correct
18 Correct 8 ms 10452 KB Output is correct
19 Incorrect 10 ms 10580 KB Output isn't correct
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 9684 KB Output is correct
2 Correct 5 ms 9712 KB Output is correct
3 Correct 5 ms 9704 KB Output is correct
4 Correct 4 ms 9708 KB Output is correct
5 Correct 5 ms 9684 KB Output is correct
6 Correct 6 ms 9704 KB Output is correct
7 Correct 5 ms 9684 KB Output is correct
8 Correct 5 ms 9684 KB Output is correct
9 Correct 5 ms 9704 KB Output is correct
10 Correct 5 ms 9684 KB Output is correct
11 Correct 6 ms 9708 KB Output is correct
12 Correct 5 ms 9652 KB Output is correct
13 Correct 5 ms 9684 KB Output is correct
14 Correct 5 ms 9684 KB Output is correct
15 Correct 6 ms 9708 KB Output is correct
16 Correct 5 ms 9648 KB Output is correct
17 Correct 10 ms 10556 KB Output is correct
18 Correct 8 ms 10452 KB Output is correct
19 Incorrect 10 ms 10580 KB Output isn't correct
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 396 ms 93348 KB Output is correct
2 Correct 426 ms 96560 KB Output is correct
3 Correct 416 ms 104500 KB Output is correct
4 Correct 296 ms 82636 KB Output is correct
5 Correct 5 ms 9684 KB Output is correct
6 Correct 405 ms 94840 KB Output is correct
7 Correct 238 ms 65432 KB Output is correct
8 Correct 134 ms 47924 KB Output is correct
9 Correct 413 ms 105460 KB Output is correct
10 Correct 324 ms 85940 KB Output is correct
11 Correct 395 ms 98764 KB Output is correct
12 Correct 6 ms 9684 KB Output is correct
13 Correct 5 ms 9712 KB Output is correct
14 Correct 5 ms 9704 KB Output is correct
15 Correct 4 ms 9708 KB Output is correct
16 Correct 5 ms 9684 KB Output is correct
17 Correct 6 ms 9704 KB Output is correct
18 Correct 5 ms 9684 KB Output is correct
19 Correct 5 ms 9684 KB Output is correct
20 Correct 5 ms 9704 KB Output is correct
21 Correct 5 ms 9684 KB Output is correct
22 Correct 6 ms 9708 KB Output is correct
23 Correct 5 ms 9652 KB Output is correct
24 Correct 5 ms 9684 KB Output is correct
25 Correct 5 ms 9684 KB Output is correct
26 Correct 6 ms 9708 KB Output is correct
27 Correct 5 ms 9648 KB Output is correct
28 Correct 10 ms 10556 KB Output is correct
29 Correct 8 ms 10452 KB Output is correct
30 Incorrect 10 ms 10580 KB Output isn't correct
31 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 396 ms 93348 KB Output is correct
2 Correct 426 ms 96560 KB Output is correct
3 Correct 416 ms 104500 KB Output is correct
4 Correct 296 ms 82636 KB Output is correct
5 Correct 5 ms 9684 KB Output is correct
6 Correct 405 ms 94840 KB Output is correct
7 Correct 238 ms 65432 KB Output is correct
8 Correct 134 ms 47924 KB Output is correct
9 Correct 413 ms 105460 KB Output is correct
10 Correct 324 ms 85940 KB Output is correct
11 Correct 395 ms 98764 KB Output is correct
12 Correct 6 ms 9684 KB Output is correct
13 Correct 5 ms 9712 KB Output is correct
14 Correct 5 ms 9704 KB Output is correct
15 Correct 4 ms 9708 KB Output is correct
16 Correct 5 ms 9684 KB Output is correct
17 Correct 6 ms 9704 KB Output is correct
18 Correct 5 ms 9684 KB Output is correct
19 Correct 5 ms 9684 KB Output is correct
20 Correct 5 ms 9704 KB Output is correct
21 Correct 5 ms 9684 KB Output is correct
22 Correct 6 ms 9708 KB Output is correct
23 Correct 5 ms 9652 KB Output is correct
24 Correct 5 ms 9684 KB Output is correct
25 Correct 5 ms 9684 KB Output is correct
26 Correct 6 ms 9708 KB Output is correct
27 Correct 5 ms 9648 KB Output is correct
28 Correct 10 ms 10556 KB Output is correct
29 Correct 8 ms 10452 KB Output is correct
30 Incorrect 10 ms 10580 KB Output isn't correct
31 Halted 0 ms 0 KB -