답안 #237689

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
237689 2020-06-08T10:28:46 Z Half Lasers (NOI19_lasers) C++14
10 / 100
127 ms 6520 KB
#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <cmath>

using namespace std;

typedef vector<int> vi;
typedef pair<int,int> pi;
typedef long long ll;

#define loop(i,a,b) for (int i = a; i <= b; i++)

#define INF ((unsigned) ~0)
#define F first
#define S second
#define PB push_back
#define MP make_pair

const int MXL = 1000000000;
int L, R, sol;
set<pi> rgs;

void rUp(int l, int r){
    if(r <= l)
        return;
    if(rgs.size() == 0){
        rgs.insert(MP(l, r));
        sol += r - l;
        return;
    }
    set<pi>::iterator it = rgs.upper_bound(MP(l, -1));
    pi pa, pb;
    if(it == rgs.end()){
        it--;
        pa = *it;
        sol += r - l - max(pa.S - l, 0);
        if(pa.S > l){
            rgs.erase(pa);
            rgs.insert(MP(pa.F, r));
        }else{
            rgs.insert(MP(l, r));
        }
        return;
    }
    if(it == rgs.begin()){
        pb = *it;
        sol += r - l - max(r - pb.F, 0);
        if(r > pb.F){
            rgs.erase(pb);
            rgs.insert(MP(l, pb.S));
        }else{
            rgs.insert(MP(l, r));
        }
        return;
    }
    pa = *(--it);
    pb = *(++it);
    sol += r - l - max(pa.S - l, 0) - max(r - pb.F, 0);
    if(pa.S > l && r > pb.F){
        rgs.erase(pa);
        rgs.erase(pb);
        rgs.insert(MP(pa.F, pb.S));
    }else if(pa.S > l){
        rgs.erase(pa);
        rgs.insert(MP(pa.F, r));
    }else if(r > pb.F){
        rgs.erase(pb);
        rgs.insert(MP(l, pb.S));
    }else{
        rgs.insert(MP(l, r));
    }
    return;
}

int main(){
    sol = 0;
    cin >> L >> R;
    for(int k = 0; k < R; k++){
        int X, gp = L, sm = 0;
        cin >> X;
        int a[500000];
        for(int i = 0; i < X; i++){
            cin >> a[i];
            gp -= a[i];
        }
        for(int i = 0; i < X; i++){
            rUp(sm + gp, sm + a[i]);
            sm += a[i];
        }
        /*for(set<pi>::iterator it = rgs.begin(); it != rgs.end(); it++){
            cout << "\n" << it->F << " " << it->S << "\n\n";
        }*/
    }
    cout << sol << "\n";
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 512 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 4 ms 384 KB Output is correct
4 Correct 5 ms 384 KB Output is correct
5 Correct 5 ms 384 KB Output is correct
6 Correct 4 ms 256 KB Output is correct
7 Correct 4 ms 384 KB Output is correct
8 Correct 5 ms 256 KB Output is correct
9 Correct 5 ms 384 KB Output is correct
10 Correct 5 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 512 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 4 ms 384 KB Output is correct
4 Correct 5 ms 384 KB Output is correct
5 Correct 5 ms 384 KB Output is correct
6 Correct 4 ms 256 KB Output is correct
7 Correct 4 ms 384 KB Output is correct
8 Correct 5 ms 256 KB Output is correct
9 Correct 5 ms 384 KB Output is correct
10 Correct 5 ms 384 KB Output is correct
11 Incorrect 5 ms 384 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 127 ms 6520 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 127 ms 6520 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 512 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 4 ms 384 KB Output is correct
4 Correct 5 ms 384 KB Output is correct
5 Correct 5 ms 384 KB Output is correct
6 Correct 4 ms 256 KB Output is correct
7 Correct 4 ms 384 KB Output is correct
8 Correct 5 ms 256 KB Output is correct
9 Correct 5 ms 384 KB Output is correct
10 Correct 5 ms 384 KB Output is correct
11 Incorrect 5 ms 384 KB Output isn't correct
12 Halted 0 ms 0 KB -