Submission #1313109

#TimeUsernameProblemLanguageResultExecution timeMemory
1313109boclobanchatMoney (IZhO17_money)C++20
0 / 100
0 ms332 KiB
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+5;
int A[MAXN],fen[MAXN];
int getlog(long long n) { return 63-__builtin_clzll(n); }
void update(int i,int n,int val) { for(;i<=n;i+=i&-i) fen[i]+=val; }
int get(int i) { int ans=0;for(;i;i-=i&-i) ans+=fen[i];return ans; }
int walk(int n,int val)
{
	if(val==0) return -1;
	int ans=0;
	for(int i=getlog(n);i+1;i--) if(ans+(1<<i)<=n&&val>fen[ans+(1<<i)]) val-=fen[ans+=(1<<i)];
	return ans+1;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>A[i];
		update(A[i],1e6,1);
	}
	int ans=1;
	bool beg=false;
	for(int i=n-1;i;i--)
	{
		update(A[i+1],1e6,-1);
		if(A[i]!=A[i+1])
		{
			if(!beg) beg=true;
			else if(get(A[i])-get(A[i]-1)) ans++,beg=false;
			else
			{
				int pos=walk(1e6,get(A[i+1]-1));
				if(pos!=A[i]) ans++,beg=false;
			}
		}
	}
	cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...