Submission #639768

#TimeUsernameProblemLanguageResultExecution timeMemory
639768studyRadio Towers (IOI22_towers)C++17
4 / 100
839 ms1468 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e5;
int n, a[MAXN],l[MAXN];
bool ok = true;
int maxi = 0,idx=0;

void init(int N, vector<int> H){
	n = N;
	ok = false;
	maxi = 0;
	for (int i=0; i<n; ++i){
		a[i] = H[i];
		maxi = max(maxi,a[i]);
		if (a[i] == maxi) idx = i;
	}
}
int max_towers(int L, int R, int D){
	if (R < idx or L > idx) return 1;
	if (max(a[L],a[R]) <= maxi-D) return 2;
	return 1;
	int ans = 0;
	if (!ok){
		fill_n(&l[0],MAXN,0);
		ok = true;
		set<int> st;
		st.emplace(INT_MAX);
		st.emplace(INT_MIN);
		vector<pair<int,int>> v;
		for (int i=0; i<n; ++i){
			v.emplace_back(a[i],i);
		}
		sort(v.begin(),v.end());
		int idx = 0;
		for (auto i:v){
			while (idx < n and v[idx].first <= i.first-D){
				st.emplace(v[idx].second);
				idx++;
			}
			auto a = st.upper_bound(i.second), b = a;
			--a;
			if ((*b) != INT_MAX){
				l[*b] = *a;
			}
		}
	}
	vector<int> dp(R+1,1);
	for (int i=L; i<=R; ++i){
		int prev = l[i];
		if (prev >= L){
			dp[i] = dp[prev]+1;
		}
		if (i) dp[i] = max(dp[i],dp[i-1]);
	}
	return dp[R];
}

Compilation message (stderr)

towers.cpp: In function 'int max_towers(int, int, int)':
towers.cpp:23:6: warning: unused variable 'ans' [-Wunused-variable]
   23 |  int ans = 0;
      |      ^~~
#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...