Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int INF = 1e9;
- const int N = 1e5;
- int L[N+10], R[N+10];
- int s, e;
- int main(){
- int n;
- scanf("%d", &n);
- int Lsum = 0, Rsum = 0;
- for(int i=1;i<=n;i++){
- char drt;
- int x;
- scanf(" %c %d", &drt, &x);
- if(drt == 'L') {
- Lsum += x;
- L[i] = x;
- R[i] -= x;
- }
- else {
- Rsum += x;
- R[i] = x;
- L[i] -= x;
- }
- }
- /// Right mirror
- int Rmx = -INF, Rs, Re;
- s = 0;
- e = 0;
- for(int i=1;i<=n;i++){
- if(R[i] >= R[i-1] + R[i]){
- // R[i] = R[i]
- s = i;
- e = i;
- }
- else {
- R[i] = R[i-1] + R[i];
- e = i;
- }
- if(R[i] > Rmx){
- Rmx = R[i];
- Rs = s;
- Re = e;
- }
- else if(R[i] == Rmx){
- if(e-s+1 < Re-Rs+1){
- Rs = s;
- Re = e;
- }
- else if(e-s+1 == Re-Rs+1){
- if(s < Rs){
- Rs = s;
- Re = e;
- }
- }
- }
- }
- /// Left mirror
- int Lmx = -INF, Ls, Le;
- s = 0;
- e = 0;
- for(int i=1;i<=n;i++){
- if(L[i] >= L[i-1] + L[i]){
- // L[i] = L[i]
- s = i;
- e = i;
- }
- else {
- L[i] = L[i-1] + L[i];
- e = i;
- }
- if(L[i] > Lmx){
- Lmx = L[i];
- Ls = s;
- Le = e;
- }
- else if(L[i] == Lmx){
- if(e-s+1 < Le-Ls+1){
- Ls = s;
- Le = e;
- }
- else if(e-s+1 == Le-Ls+1){
- if(s < Ls){
- Ls = s;
- Le = e;
- }
- }
- }
- }
- if(Rsum + Lmx >= Lsum + Rmx) printf("R %d %d %d", Rsum + Lmx, Ls, Le);
- else printf("L %d %d %d", Lsum + Rmx, Rs, Re);
- return 0;
- }
- /*
- 10
- L 10
- R 5
- L 12
- L 5
- R 7
- R 8
- R 10
- L 8
- R 9
- L 10
- L 71 5 9
- 5
- L 1
- L 2
- L 1
- L 2
- L 1
- R 7 1 5
- 10
- R 1
- R 2
- L 1
- L 2
- R 3
- L 1
- R 2
- L 5
- R 1
- R 1
- R 15 8 8
- 5
- L 1
- L 2
- L 3
- L 4
- R 10
- R 20 1 4
- 8
- L 1
- L 2
- R 1
- R 2
- R 1
- L 2
- R 2
- L 1
- L 10 3 5
- 8
- R 1
- R 2
- L 1
- L 2
- L 1
- R 2
- L 2
- R 1
- R 10 3 5
- */
Add Comment
Please, Sign In to add comment