Submission #1309477

#TimeUsernameProblemLanguageResultExecution timeMemory
1309477Muhammad_Aneeq3개의 봉우리 (IOI25_triples)C++20
70 / 100
209 ms16040 KiB
#include <bits/stdc++.h>
using namespace std;
long long count_triples(vector<int> h)
{
	int n=h.size();
	int ans=0;
	for (int i=0;i<n;i++)
	{
		{//h[i] is maximum and i is starting point
			int k=i+h[i];
			if (k<n)
			{
				{// i,k-h[k],k
					int j=k-h[k];
					if  (j>i)
						if (h[j]==j-i)
							ans++;
				}
				{//i,i+h[k],k
					if (i+h[k]!=k-h[k])
					{
						int j=i+h[k];
						if (j<k)
							if (h[j]==k-j)
								ans++;
					}
				}
			}
		}
		{//h[i] is maximum and ending point
			int k=i-h[i];
			if (k>=0)
			{
				{// k,i-h[k],i
					int j=i-h[k];
					if  (j>k)
						if (h[j]==j-k)
							ans++;
				}
				{//k,k+h[k],i
					if (i-h[k]!=k+h[k])
					{
						int j=k+h[k];
						if (j<i)
							if (h[j]==i-j)
								ans++;
					}
				}
			}
		}
	}
	vector<int> vl[2*n+10]={};
	for (int i=n-1;i>=0;i--)//j-i==h[i]+h[j]    j-h[j]==i+h[i]
		vl[i-h[i]+n].push_back(i);
	for (int i=0;i<n;i++)
	{
		if (i+h[i]+n<=2*n)
		{
			for (auto k:vl[i+h[i]+n])
			{
				{//i i+h[k] k
					int j=i+h[k];
					if (j<k)
						if (h[j]==k-i)
							ans++;
				}
				{//i i+h[i] k
					int j=i+h[i];
					if (h[i]!=h[k]&&j<k)
						if (h[j]==k-i)
							ans++;
				}
			}
		}
		vl[i-h[i]+n].pop_back();	
	}
	return ans;
}
vector<int> construct_range(int M, int K)
{
	return {};
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...