QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#235419#3028. Frogssidlee#AC ✓231ms15616kbC++141.9kb2023-11-02 19:02:362023-11-02 19:02:37

Judging History

你现在查看的是最新测评结果

  • [2023-11-02 19:02:37]
  • 评测
  • 测评结果:AC
  • 用时:231ms
  • 内存:15616kb
  • [2023-11-02 19:02:36]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;
#define st first 
#define nd second 
#define pb push_back  
#define BOOST ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); 
typedef long long ll;

const int MN = 200005; 
bool aktu[MN]; 
int frogs[MN];  

void solve(){ 
    int res = 0; 
    vector <pair< pair<int,int>,int>  > event;
    priority_queue<pair<int,int> > Q; 
    int r, s;  
    int n; cin >> n; 
    for(int i = 1; i <= n; i++){ 
        cin >> r >> s;  
        frogs[i] = s; 
        event.pb({ {max(1, i-r), 0}, i}); 
        event.pb({ {min(n, i+r), 1}, i});  // { { }, } 
    } 
    sort(event.begin(), event.end());  
    event.pb({{n+1, -1}, -1});  
    int ind = 0;  
    queue<pair<int, int> > pom;  
    int tymwyn = 0; 
    for(int i = 1; i <= n; i++){ 
        while(event[ind].st.st == i && event[ind].st.nd == 0){ 
            Q.push({frogs[event[ind].nd], event[ind].nd});  
            aktu[event[ind].nd] = 1; 
            ind++; 
        } 
        // tutaj liczymy wynik   
        tymwyn = 0; 
        while(!Q.empty() && pom.size() < 3){ 
            if(!aktu[Q.top().nd]){
                Q.pop();  
                continue; 
            } 
            tymwyn += frogs[Q.top().nd]; 
            pom.push(Q.top());  
            Q.pop(); 
        } 
        if(pom.size() == 3){ 
            res = max(res, tymwyn); 
        } 
        while(!pom.empty()){ 
            Q.push(pom.front()); 
            pom.pop(); 
        }  
        while(event[ind].st.st == i && event[ind].st.nd == 1){ 
            //Q.push({frogs[event[ind].nd], event[ind].nd});
            aktu[event[ind].nd] = 0; 
            ind++; 
        } 
    } 
    for(int i = 1; i <= n; i++) 
        aktu[i] = 0; 
    cout << res << "\n"; 
}

int main()
{
    BOOST
    int t; cin >> t; 
    while(t--){ 
        solve(); 
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 231ms
memory: 15104kb

input:

29
24946
1 145304
3 52200
2 96731
2 96731
34 5867
5 39209
1 124746
1 195359
1 140091
1 195359
1 140091
2 94760
7 26440
14 14264
34 5735
2 67479
1 116444
4 43152
2 70412
3 54405
3 54405
1 106845
4 49540
1 106845
1 118592
27 7212
1 118592
2 74860
243 821
6 28584
2 74860
1 103054
6 29393
3 55906
2 7299...

output:

596106
213676
571306
288754
4
108
4
8
599840
27
62
539982
46
235651
317587
5
258922
449979
25
165256
12
599968
11
3
5
413196
4
599639
60

result:

ok 29 lines

Test #2:

score: 0
Accepted
time: 228ms
memory: 15616kb

input:

30
3758
62 1
107 1
134 3
133 1
92 1
65 1
276 1
316 1
111 1
274 1
374 2
100 2
217 1
40 1
127 1
123 1
270 2
18 1
26 1
233 2
278 3
152 2
157 2
9 2
61 1
29 1
374 1
45 1
156 1
231 1
303 1
405 1
330 1
407 2
375 3
111 1
269 1
115 1
17 1
56 1
363 1
255 2
176 1
66 3
132 1
35 2
391 1
371 2
260 1
175 1
369 4
7...

output:

15
111
570316
6
145
598141
9790
379220
6
302651
8977
7187
574039
276501
528609
1189
6
416728
20557
9
20919
9
524338
266777
500921
559918
62
10635
3609
521671

result:

ok 30 lines

Test #3:

score: 0
Accepted
time: 227ms
memory: 15260kb

input:

30
16
3 9
7 18
3 20
8 2
5 9
6 1
2 19
2 6
3 22
2 8
7 11
3 9
1 12
2 6
8 11
7 7
16
13 2
2 2
13 2
12 4
3 4
2 3
2 3
1 3
1 3
11 1
1 3
4 3
11 4
7 2
7 5
7 4
166437
1 182681
1 170305
1 130895
2 81506
1 121104
2 99552
1 134739
1 180951
2 82208
2 86256
1 189082
3 53511
1 172928
6 32142
2 88879
1 136048
1 13239...

output:

61
13
589248
5
565958
296385
3
42
83
419938
25
541769
569373
12
385323
3
24
410656
579080
4
63
15
317025
6
246039
310300
133
239965
335677
12

result:

ok 30 lines