Submission #1320697


Source Code Expand

#include<iostream>
#include<algorithm>
#include<vector>
#include<cassert>
#include<set>
using namespace std;

#define sz(x) (int)(x.size())
#define rep(i,a,b) for(int i=a;i<b;++i)
#define pb push_back
typedef long long ll;
//////////////////////

int const N = 1e5 + 41;

int l[N], r[N], n;
ll pref[N];
int tim;

ll getPref(int l, int r){
	ll ret = pref[r];
	if(l > 0) ret -= pref[l-1];
	return ret;
}

struct S{
	ll x, type, time;
	S(){};
	S(ll x, ll type, ll time) : x(x), type(type), time(time) {};
	bool operator<(const S &s) const {
		return getX() < s.getX();
	};

	ll getX() const {
		if(type == 0){
			return x - getPref(time+1, tim);
		}else{
			return x + getPref(time, tim-1);
		}
	}
};

multiset<S> lp, rp;

ll getLast(multiset<S> &ms){
	multiset<S> :: iterator it = ms.end();
	--it;
	return ((*it).getX());
}

ll getFirst(multiset<S> &ms){
	auto it = ms.begin();
	return (*it).getX();
}

void solve(){
	cin >> n;
	rep(i, 0, n) cin >> l[i] >> r[i];
	rep(i, 0, n) pref[i] = (r[i] - l[i] + (i > 0 ? pref[i-1] : 0));
	ll ans = 0;

	lp.insert(S(l[0], 0, 0));
	rp.insert(S(l[0], 1, 0));
	rep(i, 1, n){
		tim = i;
		if(l[i] >= getLast(lp) && l[i] <= getFirst(rp)){
			lp.insert(S(l[i], 0, i));
			rp.insert(S(l[i], 1, i));
		}else if(l[i] >= getFirst(rp)){
			ans += (l[i] - getFirst(rp));
			S tmp = (*rp.begin());
			tmp.type = 0;
			tmp.x = tmp.getX();
			tmp.time = i;
			rp.erase(rp.begin());
			lp.insert(tmp);
			rp.insert(S(l[i], 1, i));
			rp.insert(S(l[i], 1, i));
		}else{
			ans += (getLast(lp) - l[i]);
			auto it = lp.end();
			--it;
			S tmp = (*it);
			tmp.type = 1;
			tmp.x = tmp.getX();
			tmp.time = i;
			lp.erase(it);
			rp.insert(tmp);
			lp.insert(S(l[i], 0, i));
			lp.insert(S(l[i], 0, i));
		}
	}

	cout << ans << endl;
}

int main(){
#ifdef _DEBUG
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
#endif

	solve();

	return 0;
}

Submission Info

Submission Time
Task E - NarrowRectangles
User Filyan
Language C++14 (GCC 5.4.1)
Score 0
Code Size 1986 Byte
Status WA
Exec Time 197 ms
Memory 14336 KB

Judge Result

Set Name Sample Subtask All
Score / Max Score 0 / 0 0 / 300 0 / 700
Status
AC × 5
AC × 3
WA × 10
AC × 12
WA × 25
Set Name Test Cases
Sample 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt, 0_004.txt
Subtask 0_000, 0_001, 0_004, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt
All 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt, 0_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 2_018.txt, 2_019.txt, 2_020.txt, 2_021.txt, 2_022.txt, 2_023.txt, 2_024.txt, 2_025.txt, 2_026.txt, 2_027.txt, 2_028.txt, 2_029.txt, 2_030.txt, 2_031.txt, 2_032.txt, 2_033.txt, 2_034.txt, 2_035.txt, 2_036.txt
Case Name Status Exec Time Memory
0_000.txt AC 1 ms 256 KB
0_001.txt AC 1 ms 256 KB
0_002.txt AC 1 ms 256 KB
0_003.txt AC 1 ms 256 KB
0_004.txt AC 1 ms 256 KB
1_005.txt AC 2 ms 256 KB
1_006.txt AC 2 ms 256 KB
1_007.txt AC 1 ms 256 KB
1_008.txt WA 2 ms 256 KB
1_009.txt WA 2 ms 256 KB
1_010.txt WA 2 ms 256 KB
1_011.txt WA 2 ms 256 KB
1_012.txt WA 2 ms 256 KB
1_013.txt WA 2 ms 256 KB
1_014.txt WA 2 ms 256 KB
1_015.txt WA 2 ms 256 KB
1_016.txt WA 2 ms 256 KB
1_017.txt WA 1 ms 256 KB
2_018.txt AC 185 ms 14336 KB
2_019.txt AC 165 ms 14336 KB
2_020.txt AC 167 ms 14336 KB
2_021.txt WA 152 ms 14336 KB
2_022.txt WA 150 ms 14336 KB
2_023.txt WA 155 ms 14336 KB
2_024.txt WA 150 ms 14336 KB
2_025.txt WA 152 ms 14336 KB
2_026.txt WA 150 ms 14336 KB
2_027.txt WA 154 ms 14336 KB
2_028.txt WA 150 ms 14336 KB
2_029.txt WA 153 ms 14336 KB
2_030.txt WA 153 ms 14336 KB
2_031.txt WA 197 ms 14336 KB
2_032.txt WA 193 ms 14336 KB
2_033.txt WA 195 ms 14336 KB
2_034.txt WA 195 ms 14336 KB
2_035.txt WA 179 ms 14336 KB
2_036.txt AC 192 ms 14336 KB