Submission #412887

# Submission time Handle Problem Language Result Execution time Memory
412887 2021-05-27T18:29:16 Z nicolaalexandra The short shank; Redemption (BOI21_prison) C++14
80 / 100
2000 ms 209400 KB
#include <bits/stdc++.h>
#define DIM 2000010
using namespace std;

vector <int> L[DIM];
deque <int> d;
int low[DIM],v[DIM],w[DIM],fth[DIM],taken[DIM],mars[DIM];
pair <int,int> intv[DIM];
int n,i,j,ans,D,t,k;

struct segment_tree{
    int maxi,poz,lazy;
} aint[DIM*4];

struct event{
    int val,idx,tip;
};

vector <event> events;

void build (int nod, int st, int dr){
    if (st == dr){
        aint[nod].maxi = mars[st];
        aint[nod].poz = st;
        return;
    }
    int mid = (st+dr)>>1;
    build (nod<<1,st,mid);
    build ((nod<<1)|1,mid+1,dr);

    int fiu_st = nod<<1, fiu_dr = (nod<<1)|1;
    if (aint[fiu_st].maxi > aint[fiu_dr].maxi)
        aint[nod].maxi = aint[fiu_st].maxi, aint[nod].poz = aint[fiu_st].poz;
    else aint[nod].maxi = aint[fiu_dr].maxi, aint[nod].poz = aint[fiu_dr].poz;
}

void update_lazy (int nod, int st, int dr){
    if (!aint[nod].lazy)
        return;
    if (st != dr){
        int fiu_st = nod<<1, fiu_dr = (nod<<1)|1;
        aint[fiu_st].maxi += aint[nod].lazy;
        aint[fiu_st].lazy += aint[nod].lazy;

        aint[fiu_dr].maxi += aint[nod].lazy;
        aint[fiu_dr].lazy += aint[nod].lazy;
    }
    aint[nod].lazy = 0;
}

void update (int nod, int st, int dr, int x, int y, int val){
    update_lazy (nod,st,dr);
    if (x <= st && dr <= y){
        aint[nod].maxi += val;
        aint[nod].lazy += val;
        update_lazy (nod,st,dr);
        return;
    }

    int mid = (st+dr)>>1;
    if (x <= mid)
        update (nod<<1,st,mid,x,y,val);
    if (y > mid)
        update ((nod<<1)|1,mid+1,dr,x,y,val);

    int fiu_st = nod<<1, fiu_dr = (nod<<1)|1;
    update_lazy (fiu_st,st,mid);
    update_lazy (fiu_dr,mid+1,dr);

    if (aint[fiu_st].maxi > aint[fiu_dr].maxi)
        aint[nod].maxi = aint[fiu_st].maxi, aint[nod].poz = aint[fiu_st].poz;
    else aint[nod].maxi = aint[fiu_dr].maxi, aint[nod].poz = aint[fiu_dr].poz;

}

inline int cmp (event a, event b){
    if (a.val == b.val){
        if (a.tip == b.tip && a.tip == 1)
            return intv[a.idx].second > intv[b.idx].second;

        return a.tip < b.tip; /// mai intai stergerile
    }
    return a.val < b.val;
}

int main (){

    //ifstream cin ("date.in");
    //ofstream cout ("date.out");

    cin>>n>>D>>t;
    for (i=1;i<=n;i++)
        cin>>v[i];


    for (i=1;i<=n;i++){
        while (!d.empty() && v[d.back()] + i - d.back() - t > 0)
            d.pop_back();

        if (v[i] <= t){
            low[i] = -1;
            ans++;


        } else {

            if (d.empty())
                low[i] = -1;
            else {
                ans++;
                low[i] = d.back();
            }

        }

        /// trb sa mai scot din stiva in caz ca o pozitie si ar pierde influenta pt ca
        /// vine alta care incepe un interval nou
        if (v[i] < t){
            while (!d.empty() && v[d.back()] - d.back() >= v[i] - i)
                d.pop_back();

            d.push_back(i);
        }

    }

    for (i=1;i<=n;i++)
        if (low[i] != -1 && low[i] <= i-1){

            mars[low[i]]++, mars[i]--;
            //update (1,1,n,low[i],i-1,1);

            k++;
            intv[k] = make_pair(low[i],i-1);
            events.push_back({low[i],k,1});
            events.push_back({i,k,0});
        }

    for (i=1;i<=n;i++)
        mars[i] += mars[i-1];

    build (1,1,n);

    sort (events.begin(),events.end(),cmp);

    d.clear();
    int pos = 0;
    for (i=1;i<=n;i++){

        while (pos < events.size() && events[pos].val == i && events[pos].tip == 0){
            d.pop_back();
            pos++;
        }

        while (pos < events.size() && events[pos].val == i && events[pos].tip == 1){
            if (!d.empty())
                fth[events[pos].idx] = d.back();

            d.push_back(events[pos].idx);
            pos++;
        }

        if (!d.empty())
            w[i] = d.back();
    }


    for (;D--;){
        int poz = aint[1].poz;

        ans -= aint[1].maxi;

        int x = w[poz];
        while (x && !taken[x]){
            taken[x] = 1;
            update (1,1,n,intv[x].first,intv[x].second,-1);
            x = fth[x];
        }
    }

    cout<<ans;

  /*  for (i=1;i<=n;i++)
        sort (L[i].begin(),L[i].end());

    for (int pas=1;pas<=D;pas++){
        int poz = aint[1].poz;

        ans -= aint[1].maxi;

        for (i=1;i<=poz;i++)
            while (L[i].size() && L[i].back() >= poz){
                update (1,1,n,i,L[i].back(),-1);
                L[i].pop_back();
            }
    }

    cout<<ans;
    */

    return 0;
}

Compilation message

prison.cpp: In function 'int main()':
prison.cpp:150:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<event>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  150 |         while (pos < events.size() && events[pos].val == i && events[pos].tip == 0){
      |                ~~~~^~~~~~~~~~~~~~~
prison.cpp:155:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<event>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  155 |         while (pos < events.size() && events[pos].val == i && events[pos].tip == 1){
      |                ~~~~^~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 26 ms 47192 KB Output is correct
2 Correct 26 ms 47308 KB Output is correct
3 Correct 26 ms 47356 KB Output is correct
4 Correct 27 ms 47348 KB Output is correct
5 Correct 26 ms 47376 KB Output is correct
6 Correct 25 ms 47308 KB Output is correct
7 Correct 26 ms 47300 KB Output is correct
8 Correct 26 ms 47300 KB Output is correct
9 Correct 30 ms 47252 KB Output is correct
10 Correct 25 ms 47308 KB Output is correct
11 Correct 25 ms 47292 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 25 ms 47292 KB Output is correct
2 Correct 333 ms 76500 KB Output is correct
3 Correct 311 ms 73516 KB Output is correct
4 Correct 309 ms 77320 KB Output is correct
5 Correct 244 ms 79004 KB Output is correct
6 Correct 336 ms 75308 KB Output is correct
7 Correct 802 ms 89084 KB Output is correct
8 Correct 343 ms 77224 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 26 ms 47192 KB Output is correct
2 Correct 26 ms 47308 KB Output is correct
3 Correct 26 ms 47356 KB Output is correct
4 Correct 27 ms 47348 KB Output is correct
5 Correct 26 ms 47376 KB Output is correct
6 Correct 25 ms 47308 KB Output is correct
7 Correct 26 ms 47300 KB Output is correct
8 Correct 26 ms 47300 KB Output is correct
9 Correct 30 ms 47252 KB Output is correct
10 Correct 25 ms 47308 KB Output is correct
11 Correct 25 ms 47292 KB Output is correct
12 Correct 25 ms 47328 KB Output is correct
13 Correct 26 ms 47296 KB Output is correct
14 Correct 27 ms 47356 KB Output is correct
15 Correct 30 ms 47340 KB Output is correct
16 Correct 26 ms 47304 KB Output is correct
17 Correct 27 ms 47252 KB Output is correct
18 Correct 26 ms 47336 KB Output is correct
19 Correct 26 ms 47312 KB Output is correct
20 Correct 26 ms 47348 KB Output is correct
21 Correct 26 ms 47336 KB Output is correct
22 Correct 26 ms 47336 KB Output is correct
23 Correct 29 ms 47560 KB Output is correct
24 Correct 28 ms 47564 KB Output is correct
25 Correct 32 ms 47624 KB Output is correct
26 Correct 30 ms 47488 KB Output is correct
27 Correct 29 ms 47576 KB Output is correct
28 Correct 28 ms 47576 KB Output is correct
29 Correct 33 ms 47560 KB Output is correct
30 Correct 28 ms 47580 KB Output is correct
31 Correct 28 ms 47608 KB Output is correct
32 Correct 27 ms 47560 KB Output is correct
33 Correct 28 ms 47560 KB Output is correct
34 Correct 29 ms 47664 KB Output is correct
35 Correct 29 ms 47592 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 25 ms 47256 KB Output is correct
2 Correct 73 ms 53288 KB Output is correct
3 Correct 79 ms 53072 KB Output is correct
4 Correct 97 ms 53680 KB Output is correct
5 Correct 116 ms 53812 KB Output is correct
6 Correct 138 ms 53868 KB Output is correct
7 Correct 68 ms 52668 KB Output is correct
8 Correct 80 ms 52544 KB Output is correct
9 Correct 159 ms 54708 KB Output is correct
10 Correct 61 ms 52728 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 26 ms 47192 KB Output is correct
2 Correct 26 ms 47308 KB Output is correct
3 Correct 26 ms 47356 KB Output is correct
4 Correct 27 ms 47348 KB Output is correct
5 Correct 26 ms 47376 KB Output is correct
6 Correct 25 ms 47308 KB Output is correct
7 Correct 26 ms 47300 KB Output is correct
8 Correct 26 ms 47300 KB Output is correct
9 Correct 30 ms 47252 KB Output is correct
10 Correct 25 ms 47308 KB Output is correct
11 Correct 25 ms 47292 KB Output is correct
12 Correct 25 ms 47328 KB Output is correct
13 Correct 26 ms 47296 KB Output is correct
14 Correct 27 ms 47356 KB Output is correct
15 Correct 30 ms 47340 KB Output is correct
16 Correct 26 ms 47304 KB Output is correct
17 Correct 27 ms 47252 KB Output is correct
18 Correct 26 ms 47336 KB Output is correct
19 Correct 26 ms 47312 KB Output is correct
20 Correct 26 ms 47348 KB Output is correct
21 Correct 26 ms 47336 KB Output is correct
22 Correct 26 ms 47336 KB Output is correct
23 Correct 29 ms 47560 KB Output is correct
24 Correct 28 ms 47564 KB Output is correct
25 Correct 32 ms 47624 KB Output is correct
26 Correct 30 ms 47488 KB Output is correct
27 Correct 29 ms 47576 KB Output is correct
28 Correct 28 ms 47576 KB Output is correct
29 Correct 33 ms 47560 KB Output is correct
30 Correct 28 ms 47580 KB Output is correct
31 Correct 28 ms 47608 KB Output is correct
32 Correct 27 ms 47560 KB Output is correct
33 Correct 28 ms 47560 KB Output is correct
34 Correct 29 ms 47664 KB Output is correct
35 Correct 29 ms 47592 KB Output is correct
36 Correct 25 ms 47256 KB Output is correct
37 Correct 73 ms 53288 KB Output is correct
38 Correct 79 ms 53072 KB Output is correct
39 Correct 97 ms 53680 KB Output is correct
40 Correct 116 ms 53812 KB Output is correct
41 Correct 138 ms 53868 KB Output is correct
42 Correct 68 ms 52668 KB Output is correct
43 Correct 80 ms 52544 KB Output is correct
44 Correct 159 ms 54708 KB Output is correct
45 Correct 61 ms 52728 KB Output is correct
46 Correct 25 ms 47300 KB Output is correct
47 Correct 30 ms 47348 KB Output is correct
48 Correct 26 ms 47320 KB Output is correct
49 Correct 26 ms 47308 KB Output is correct
50 Correct 26 ms 47248 KB Output is correct
51 Correct 26 ms 47300 KB Output is correct
52 Correct 26 ms 47264 KB Output is correct
53 Correct 26 ms 47324 KB Output is correct
54 Correct 26 ms 47348 KB Output is correct
55 Correct 26 ms 47308 KB Output is correct
56 Correct 29 ms 47308 KB Output is correct
57 Correct 29 ms 47672 KB Output is correct
58 Correct 29 ms 47524 KB Output is correct
59 Correct 29 ms 47556 KB Output is correct
60 Correct 28 ms 47460 KB Output is correct
61 Correct 33 ms 47572 KB Output is correct
62 Correct 28 ms 47492 KB Output is correct
63 Correct 28 ms 47536 KB Output is correct
64 Correct 27 ms 47580 KB Output is correct
65 Correct 28 ms 47492 KB Output is correct
66 Correct 29 ms 47564 KB Output is correct
67 Correct 27 ms 47576 KB Output is correct
68 Correct 28 ms 47632 KB Output is correct
69 Correct 28 ms 47560 KB Output is correct
70 Correct 29 ms 47324 KB Output is correct
71 Correct 86 ms 53396 KB Output is correct
72 Correct 71 ms 52960 KB Output is correct
73 Correct 114 ms 53692 KB Output is correct
74 Correct 116 ms 53752 KB Output is correct
75 Correct 138 ms 53852 KB Output is correct
76 Correct 68 ms 52672 KB Output is correct
77 Correct 66 ms 52584 KB Output is correct
78 Correct 131 ms 54704 KB Output is correct
79 Correct 63 ms 52672 KB Output is correct
80 Correct 81 ms 53088 KB Output is correct
81 Correct 89 ms 53524 KB Output is correct
82 Correct 92 ms 53080 KB Output is correct
83 Correct 94 ms 53736 KB Output is correct
84 Correct 74 ms 53540 KB Output is correct
85 Correct 126 ms 54068 KB Output is correct
86 Correct 89 ms 53304 KB Output is correct
87 Correct 73 ms 52656 KB Output is correct
88 Correct 114 ms 54216 KB Output is correct
89 Correct 103 ms 54704 KB Output is correct
90 Correct 94 ms 54088 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 26 ms 47192 KB Output is correct
2 Correct 26 ms 47308 KB Output is correct
3 Correct 26 ms 47356 KB Output is correct
4 Correct 27 ms 47348 KB Output is correct
5 Correct 26 ms 47376 KB Output is correct
6 Correct 25 ms 47308 KB Output is correct
7 Correct 26 ms 47300 KB Output is correct
8 Correct 26 ms 47300 KB Output is correct
9 Correct 30 ms 47252 KB Output is correct
10 Correct 25 ms 47308 KB Output is correct
11 Correct 25 ms 47292 KB Output is correct
12 Correct 25 ms 47292 KB Output is correct
13 Correct 333 ms 76500 KB Output is correct
14 Correct 311 ms 73516 KB Output is correct
15 Correct 309 ms 77320 KB Output is correct
16 Correct 244 ms 79004 KB Output is correct
17 Correct 336 ms 75308 KB Output is correct
18 Correct 802 ms 89084 KB Output is correct
19 Correct 343 ms 77224 KB Output is correct
20 Correct 25 ms 47328 KB Output is correct
21 Correct 26 ms 47296 KB Output is correct
22 Correct 27 ms 47356 KB Output is correct
23 Correct 30 ms 47340 KB Output is correct
24 Correct 26 ms 47304 KB Output is correct
25 Correct 27 ms 47252 KB Output is correct
26 Correct 26 ms 47336 KB Output is correct
27 Correct 26 ms 47312 KB Output is correct
28 Correct 26 ms 47348 KB Output is correct
29 Correct 26 ms 47336 KB Output is correct
30 Correct 26 ms 47336 KB Output is correct
31 Correct 29 ms 47560 KB Output is correct
32 Correct 28 ms 47564 KB Output is correct
33 Correct 32 ms 47624 KB Output is correct
34 Correct 30 ms 47488 KB Output is correct
35 Correct 29 ms 47576 KB Output is correct
36 Correct 28 ms 47576 KB Output is correct
37 Correct 33 ms 47560 KB Output is correct
38 Correct 28 ms 47580 KB Output is correct
39 Correct 28 ms 47608 KB Output is correct
40 Correct 27 ms 47560 KB Output is correct
41 Correct 28 ms 47560 KB Output is correct
42 Correct 29 ms 47664 KB Output is correct
43 Correct 29 ms 47592 KB Output is correct
44 Correct 25 ms 47256 KB Output is correct
45 Correct 73 ms 53288 KB Output is correct
46 Correct 79 ms 53072 KB Output is correct
47 Correct 97 ms 53680 KB Output is correct
48 Correct 116 ms 53812 KB Output is correct
49 Correct 138 ms 53868 KB Output is correct
50 Correct 68 ms 52668 KB Output is correct
51 Correct 80 ms 52544 KB Output is correct
52 Correct 159 ms 54708 KB Output is correct
53 Correct 61 ms 52728 KB Output is correct
54 Correct 25 ms 47300 KB Output is correct
55 Correct 30 ms 47348 KB Output is correct
56 Correct 26 ms 47320 KB Output is correct
57 Correct 26 ms 47308 KB Output is correct
58 Correct 26 ms 47248 KB Output is correct
59 Correct 26 ms 47300 KB Output is correct
60 Correct 26 ms 47264 KB Output is correct
61 Correct 26 ms 47324 KB Output is correct
62 Correct 26 ms 47348 KB Output is correct
63 Correct 26 ms 47308 KB Output is correct
64 Correct 29 ms 47308 KB Output is correct
65 Correct 29 ms 47672 KB Output is correct
66 Correct 29 ms 47524 KB Output is correct
67 Correct 29 ms 47556 KB Output is correct
68 Correct 28 ms 47460 KB Output is correct
69 Correct 33 ms 47572 KB Output is correct
70 Correct 28 ms 47492 KB Output is correct
71 Correct 28 ms 47536 KB Output is correct
72 Correct 27 ms 47580 KB Output is correct
73 Correct 28 ms 47492 KB Output is correct
74 Correct 29 ms 47564 KB Output is correct
75 Correct 27 ms 47576 KB Output is correct
76 Correct 28 ms 47632 KB Output is correct
77 Correct 28 ms 47560 KB Output is correct
78 Correct 29 ms 47324 KB Output is correct
79 Correct 86 ms 53396 KB Output is correct
80 Correct 71 ms 52960 KB Output is correct
81 Correct 114 ms 53692 KB Output is correct
82 Correct 116 ms 53752 KB Output is correct
83 Correct 138 ms 53852 KB Output is correct
84 Correct 68 ms 52672 KB Output is correct
85 Correct 66 ms 52584 KB Output is correct
86 Correct 131 ms 54704 KB Output is correct
87 Correct 63 ms 52672 KB Output is correct
88 Correct 81 ms 53088 KB Output is correct
89 Correct 89 ms 53524 KB Output is correct
90 Correct 92 ms 53080 KB Output is correct
91 Correct 94 ms 53736 KB Output is correct
92 Correct 74 ms 53540 KB Output is correct
93 Correct 126 ms 54068 KB Output is correct
94 Correct 89 ms 53304 KB Output is correct
95 Correct 73 ms 52656 KB Output is correct
96 Correct 114 ms 54216 KB Output is correct
97 Correct 103 ms 54704 KB Output is correct
98 Correct 94 ms 54088 KB Output is correct
99 Correct 25 ms 47300 KB Output is correct
100 Correct 26 ms 47320 KB Output is correct
101 Correct 30 ms 47228 KB Output is correct
102 Correct 27 ms 47308 KB Output is correct
103 Correct 31 ms 47240 KB Output is correct
104 Correct 26 ms 47288 KB Output is correct
105 Correct 27 ms 47288 KB Output is correct
106 Correct 26 ms 47364 KB Output is correct
107 Correct 26 ms 47284 KB Output is correct
108 Correct 26 ms 47308 KB Output is correct
109 Correct 28 ms 47284 KB Output is correct
110 Correct 26 ms 47256 KB Output is correct
111 Correct 374 ms 76372 KB Output is correct
112 Correct 320 ms 73588 KB Output is correct
113 Correct 311 ms 77276 KB Output is correct
114 Correct 250 ms 79256 KB Output is correct
115 Correct 349 ms 75264 KB Output is correct
116 Correct 807 ms 89004 KB Output is correct
117 Correct 343 ms 77216 KB Output is correct
118 Correct 29 ms 47672 KB Output is correct
119 Correct 28 ms 47564 KB Output is correct
120 Correct 29 ms 47564 KB Output is correct
121 Correct 31 ms 47604 KB Output is correct
122 Correct 29 ms 47564 KB Output is correct
123 Correct 29 ms 47528 KB Output is correct
124 Correct 29 ms 47600 KB Output is correct
125 Correct 29 ms 47604 KB Output is correct
126 Correct 28 ms 47564 KB Output is correct
127 Correct 27 ms 47524 KB Output is correct
128 Correct 27 ms 47504 KB Output is correct
129 Correct 31 ms 47648 KB Output is correct
130 Correct 29 ms 47648 KB Output is correct
131 Correct 26 ms 47348 KB Output is correct
132 Correct 85 ms 53356 KB Output is correct
133 Correct 87 ms 53036 KB Output is correct
134 Correct 96 ms 53584 KB Output is correct
135 Correct 114 ms 53684 KB Output is correct
136 Correct 128 ms 53888 KB Output is correct
137 Correct 69 ms 52724 KB Output is correct
138 Correct 67 ms 52572 KB Output is correct
139 Correct 129 ms 54760 KB Output is correct
140 Correct 61 ms 52684 KB Output is correct
141 Correct 82 ms 53164 KB Output is correct
142 Correct 89 ms 53436 KB Output is correct
143 Correct 86 ms 53144 KB Output is correct
144 Correct 96 ms 53808 KB Output is correct
145 Correct 73 ms 53436 KB Output is correct
146 Correct 122 ms 54024 KB Output is correct
147 Correct 89 ms 53308 KB Output is correct
148 Correct 79 ms 52692 KB Output is correct
149 Correct 113 ms 54128 KB Output is correct
150 Correct 103 ms 54624 KB Output is correct
151 Correct 94 ms 54100 KB Output is correct
152 Correct 1275 ms 166656 KB Output is correct
153 Correct 1341 ms 170080 KB Output is correct
154 Correct 1277 ms 163468 KB Output is correct
155 Correct 1868 ms 178060 KB Output is correct
156 Correct 1406 ms 186752 KB Output is correct
157 Correct 1165 ms 165008 KB Output is correct
158 Correct 1480 ms 180352 KB Output is correct
159 Execution timed out 2071 ms 209400 KB Time limit exceeded
160 Halted 0 ms 0 KB -