Submission #2147895


Source Code Expand

#include <bits/stdc++.h>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
#define RREP(i, a, b) for(int i = (a); i >= (b); i--)
#define pq priority_queue
#define P pair<int, int>
#define P2 pair<int, P>
#define P3 pair<int, P2>
typedef long long ll; typedef long double ld;
using namespace std;
const int INF = 1e9, MOD = 1e9+7, around[] = {0, 1, 1, -1, -1, 0, -1, 1, 0, 0};
const int vx[] = {1, 0, -1, 0}, vy[] = {0, 1, 0, -1};
const ld PI = abs(acos(-1));
const int sqrtN = 512;
const int logN = 32;
const ll LINF=1e18;

vector<int> vec;

struct Node{
	int ma, sum;
	
	Node(int ma, int sum) : ma(ma), sum(sum) {}
	Node operator*(const Node r) const{return Node(max(ma, r.ma), sum + r.sum);}
} e(0, 0);

struct SegmentTree{
	vector<Node> seg;
	int sz = 1;
	
	SegmentTree(int n){
		while(sz < n) sz *= 2;
		seg.assign(sz * 2, e);
	}
	
	void add(int k){
		int tmp = vec[k];
		k += sz - 1;
		seg[k] = Node(tmp, seg[k].sum + 1);
		while(k){
			k = (k - 1) / 2;
			seg[k] = seg[2 * k + 1] * seg[2 * k + 2];
		}
	}
	
	Node get(int a, int b){
		return get(a, b, 0, 0, sz);
	}
	
	Node get(int a, int b, int k, int l, int r){
		if(b<=l||r<=a) return e;
		if(a<=l&&r<=b) return seg[k];
		
		return get(a, b, 2 * k + 1, l, (l + r) / 2) * get(a, b, 2 * k + 2, (l + r) / 2, r);
	}
};

int main(){
	int n; cin >> n;
	int a[200010]; for(int i = 0; i < n; i++) cin >> a[i];
	for(int i = 0; i < n; i++) vec.push_back(a[i]);
	sort(vec.begin(), vec.end());
	vec.erase(unique(vec.begin(), vec.end()), vec.end());
	SegmentTree seg(vec.size());
	
	int pos = lower_bound(vec.begin(), vec.end(), a[0]) - vec.begin();
	seg.add(pos);
	
	ll dp[200010] = {};
	for(int i = 1; i < n; i++){
		int k = lower_bound(vec.begin(), vec.end(), a[i]) - vec.begin();
		int pos = max(0, seg.get(0, vec.size()).ma - a[i]);
		int pot = seg.get(k + 1, vec.size()).sum;
		
		if(pos < pot){//increment
			if(pos){
				dp[i] = dp[i - 1] + pos;
				int tmp = seg.get(0, i + 1).ma;
				k = lower_bound(vec.begin(), vec.end(), tmp) - vec.begin();
				seg.add(k);
			}else{
				dp[i] = dp[i - 1] + pos;
				seg.add(k);
			}
		}else{//swap
			dp[i] = dp[i - 1] + pot;
			seg.add(k);
		}
	}
	
	//for(int i = 0; i < n; i++) cout << dp[i] << " "; cout << endl;
	cout << dp[n - 1] << endl;
	return 0;
}

//dp[i + 1] = min(dp[i] + max(0, a[i - 1] - a[i]), dp[i] + (i + 1 以上の個数));

Submission Info

Submission Time
Task B - Increment and Swap
User ecasdqina
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2432 Byte
Status WA
Exec Time 195 ms
Memory 7540 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 1500
Status
AC × 2
AC × 10
WA × 56
Set Name Test Cases
Sample example0.txt, example1.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, 038.txt, 039.txt, 040.txt, 041.txt, 042.txt, 043.txt, 044.txt, 045.txt, 046.txt, 047.txt, 048.txt, 049.txt, 050.txt, 051.txt, 052.txt, 053.txt, 054.txt, 055.txt, 056.txt, 057.txt, 058.txt, 059.txt, 060.txt, 061.txt, 062.txt, 063.txt, example0.txt, example1.txt
Case Name Status Exec Time Memory
000.txt WA 171 ms 5492 KB
001.txt WA 174 ms 5492 KB
002.txt WA 175 ms 5492 KB
003.txt WA 174 ms 5492 KB
004.txt WA 176 ms 5492 KB
005.txt WA 172 ms 5492 KB
006.txt WA 173 ms 5492 KB
007.txt WA 176 ms 5492 KB
008.txt WA 172 ms 5492 KB
009.txt WA 176 ms 5492 KB
010.txt WA 163 ms 5492 KB
011.txt WA 181 ms 7540 KB
012.txt WA 182 ms 7540 KB
013.txt WA 178 ms 7540 KB
014.txt WA 182 ms 7540 KB
015.txt WA 181 ms 7540 KB
016.txt WA 183 ms 7540 KB
017.txt WA 182 ms 7540 KB
018.txt WA 159 ms 7540 KB
019.txt WA 174 ms 7540 KB
020.txt WA 181 ms 7540 KB
021.txt WA 17 ms 2176 KB
022.txt WA 170 ms 5492 KB
023.txt WA 79 ms 3704 KB
024.txt WA 31 ms 3324 KB
025.txt WA 93 ms 3960 KB
026.txt WA 20 ms 2432 KB
027.txt WA 132 ms 5108 KB
028.txt WA 67 ms 3576 KB
029.txt WA 62 ms 3576 KB
030.txt WA 64 ms 3576 KB
031.txt WA 130 ms 5108 KB
032.txt WA 82 ms 3704 KB
033.txt WA 82 ms 4728 KB
034.txt WA 142 ms 5236 KB
035.txt WA 26 ms 3328 KB
036.txt WA 165 ms 7412 KB
037.txt WA 122 ms 5108 KB
038.txt WA 34 ms 2812 KB
039.txt WA 90 ms 5240 KB
040.txt WA 83 ms 4728 KB
041.txt WA 164 ms 7412 KB
042.txt AC 124 ms 7540 KB
043.txt AC 124 ms 7540 KB
044.txt AC 171 ms 7540 KB
045.txt AC 2 ms 1792 KB
046.txt WA 53 ms 3444 KB
047.txt AC 195 ms 7540 KB
048.txt AC 65 ms 3444 KB
049.txt WA 67 ms 3444 KB
050.txt WA 84 ms 3444 KB
051.txt WA 106 ms 3444 KB
052.txt WA 132 ms 3444 KB
053.txt WA 154 ms 3828 KB
054.txt WA 189 ms 5492 KB
055.txt AC 62 ms 3444 KB
056.txt WA 65 ms 3444 KB
057.txt WA 81 ms 3444 KB
058.txt WA 101 ms 3704 KB
059.txt WA 129 ms 3444 KB
060.txt WA 163 ms 3828 KB
061.txt WA 183 ms 5492 KB
062.txt AC 134 ms 5492 KB
063.txt WA 130 ms 5492 KB
example0.txt AC 2 ms 2304 KB
example1.txt AC 2 ms 2304 KB