Submission #3288222


Source Code Expand

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;
 
#define fi first
#define se second
#define mp make_pair
#define pb push_back
 
typedef long long ll;
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef long double ld; 
typedef tree<ii, null_type, less<ii>, rb_tree_tag, tree_order_statistics_node_update> pbds;

int a[222222];

struct node
{
	int v,lazy;
};

const int INF = int(1e9);

node st[222222*4];
void build(int id, int l, int r)
{
	st[id].lazy=0;st[id].v=INF;
	if(r-l>=2)
	{
		int mid=(l+r)>>1;
		build(id*2,l,mid); build(id*2+1,mid,r);
	}
}

void push(int id, int l, int r)
{
	if(st[id].lazy!=0)
	{
		st[id].v+=st[id].lazy;
		if(r-l>=2)
		{
			st[id*2].lazy+=st[id].lazy; st[id*2+1].lazy+=st[id].lazy;
		}
		st[id].lazy=0;
	}
}

void update(int id, int l, int r, int pos, int v)
{
	push(id,l,r);
	if(pos>=r||pos<l) return ;
	if(r-l<2)
	{
		st[id].v=v; return ;
	}
	int mid=(l+r)>>1;
	update(id*2,l,mid,pos,v); update(id*2+1,mid,r,pos,v);
	st[id].v=min(st[id*2].v,st[id*2+1].v);
}

void updaterange(int id, int l, int r, int ql, int qr, int v)
{
	push(id,l,r);
	if(ql>=r||l>=qr) return ;
	if(ql<=l&&r<=qr)
	{
		st[id].lazy+=v; push(id,l,r); return ;
	}
	int mid=(l+r)>>1;
	updaterange(id*2,l,mid,ql,qr,v); updaterange(id*2+1,mid,r,ql,qr,v);
	st[id].v=min(st[id*2].v,st[id*2+1].v);
}

ii query(int id, int l, int r, int ql, int qr)
{
	push(id,l,r);
	if(ql>=r||l>=qr) return mp(INF, -1);
	if(ql<=l&&r<=qr) return mp(st[id].v, l);
	int mid=(l+r)>>1;
	return min(query(id*2,l,mid,ql,qr),query(id*2+1,mid,r,ql,qr));
}

int main()
{
	ios_base::sync_with_stdio(0); cin.tie(0);
	int n; cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	pbds T; int timer = 0; vi S;
	ll ans = 0; build(1,0,n);
	for(int i=0;i<n;i++)
	{
		int aft = T.order_of_key(mp(a[i]+1,-1)) - 1;
		int mn = i-1-aft;
		if(mn==0)
		{
			T.insert(mp(a[i],++timer));			
			if(S.empty()||S.back()!=a[i]) 
			{
				S.pb(a[i]);
				update(1,0,n,S.size(),a[i]-i);
			}
			else
			{
				update(1,0,n,S.size()-1,a[i]-i);
			}
			continue;
		}
		int id = upper_bound(S.begin(),S.end(),a[i])-S.begin();
		id--;
		aft=id;
		ii X = query(1,0,n,id+1,n);
		if(X.fi+i-1-a[i]<mn)
		{
			mn=X.fi+i-1-a[i];
			aft=X.se;
		}
		//cerr<<"MN "<<mn<<' '<<"AFT "<<aft<<'\n';
		ans+=mn;
		updaterange(1,0,n,aft+1,n,-1);
		if(aft>=0) 
		{
			int pos = T.order_of_key(mp(S[aft]+1,-1));
			//cerr<<S[aft]<<' '<<pos<<'\n';
			T.insert(mp(S[aft],++timer));
			update(1,0,n,aft,S[aft]-pos);
		}
		else T.insert(mp(a[i],++timer));
	}
	cout<<ans<<'\n';
}

Submission Info

Submission Time
Task B - Increment and Swap
User zscoder
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2727 Byte
Status WA
Exec Time 483 ms
Memory 20468 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 1500
Status
AC × 2
AC × 8
WA × 58
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 233 ms 19712 KB
001.txt WA 213 ms 19712 KB
002.txt WA 244 ms 19712 KB
003.txt WA 242 ms 19712 KB
004.txt WA 259 ms 19712 KB
005.txt WA 274 ms 19712 KB
006.txt WA 254 ms 19712 KB
007.txt WA 263 ms 19712 KB
008.txt WA 233 ms 19712 KB
009.txt WA 255 ms 19712 KB
010.txt WA 228 ms 19712 KB
011.txt WA 164 ms 19712 KB
012.txt WA 251 ms 19712 KB
013.txt WA 231 ms 19712 KB
014.txt WA 253 ms 19712 KB
015.txt WA 232 ms 19712 KB
016.txt WA 223 ms 19712 KB
017.txt WA 255 ms 19712 KB
018.txt WA 261 ms 19712 KB
019.txt WA 160 ms 19712 KB
020.txt WA 262 ms 19712 KB
021.txt WA 20 ms 2304 KB
022.txt WA 229 ms 18944 KB
023.txt WA 105 ms 10752 KB
024.txt WA 38 ms 3840 KB
025.txt WA 142 ms 12416 KB
026.txt WA 27 ms 2560 KB
027.txt WA 183 ms 16384 KB
028.txt WA 91 ms 9600 KB
029.txt WA 71 ms 9344 KB
030.txt WA 71 ms 9472 KB
031.txt WA 189 ms 16384 KB
032.txt WA 114 ms 10880 KB
033.txt WA 96 ms 10880 KB
034.txt WA 127 ms 17024 KB
035.txt WA 22 ms 2944 KB
036.txt WA 219 ms 18304 KB
037.txt WA 135 ms 15744 KB
038.txt WA 27 ms 3968 KB
039.txt WA 129 ms 11392 KB
040.txt WA 117 ms 10752 KB
041.txt WA 176 ms 18048 KB
042.txt AC 273 ms 20468 KB
043.txt AC 288 ms 19712 KB
044.txt WA 210 ms 19712 KB
045.txt AC 1 ms 256 KB
046.txt WA 483 ms 19712 KB
047.txt WA 224 ms 19712 KB
048.txt AC 133 ms 19712 KB
049.txt WA 238 ms 19712 KB
050.txt WA 187 ms 19712 KB
051.txt WA 259 ms 19712 KB
052.txt WA 218 ms 19712 KB
053.txt WA 261 ms 19712 KB
054.txt WA 197 ms 19712 KB
055.txt AC 234 ms 19712 KB
056.txt WA 268 ms 19712 KB
057.txt WA 170 ms 19712 KB
058.txt WA 200 ms 19712 KB
059.txt WA 199 ms 19712 KB
060.txt WA 195 ms 19712 KB
061.txt WA 194 ms 19712 KB
062.txt AC 244 ms 20216 KB
063.txt WA 208 ms 19712 KB
example0.txt AC 1 ms 256 KB
example1.txt AC 1 ms 256 KB