Submission #1282438

#TimeUsernameProblemLanguageResultExecution timeMemory
1282438Ekber_EkberMoney (IZhO17_money)C++20
0 / 100
13 ms32388 KiB
#include <bits/stdc++.h>
#define GOOD_LUCK ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define int long long
#define endl "\n"
#define ff first
#define ss second
#define pb push_back
#define all(v) v.begin(), v.end()
using namespace std;

constexpr int MAX = 2e+5 + 1, INF = 2e+16, MOD = 1e+9 + 7, K = 31;

struct SegTree{
	int n;
	vector <int> t;
	void init(int n1) {
		n = n1;
		t.assign(4*(n+2), INF);
	}
	int merge(int a, int b) {
		return min(a, b);       // TODO
	}
	int find(int v, int tl, int tr, int l, int r) {
		if (l > r) return INF;      // TODO
		if (tl == l && tr == r) return t[v];
		int tm = (tl + tr) / 2;
		int r1 = find(v*2, tl, tm, l, min(r, tm));
		int r2 = find(v*2+1, tm+1, tr, max(l, tm+1), r);
		return merge(r1, r2);
	}
	void update(int v, int tl, int tr, int i, int x) {
		if (tl == tr) {
			t[v] = x;
			return;
		}
		int tm = (tl + tr) / 2;
		if (i <= tm) update(v*2, tl, tm, i, x);
		else update(v*2+1, tm+1, tr, i, x);
		t[v] = merge(t[v*2], t[v*2+1]);
	}
	int get(int l, int r) {
		return find(1, 0, n-1, l, r);
	}
	void upd(int i, int x) {
		update(1, 0, n-1, i, x);
	}
};

void _() {
	int n;
	cin >> n;
	vector <int> v(n);
	for (int &i : v) cin >> i;
	SegTree t;
	t.init(1000005);
	for (int i=n-1; i >= 0; i--) t.upd(v[i], i);
	int res=1;
	for (int i = 0; i < n-1; i++) {
		if (v[i+1] < v[i]) {
			res++;
			continue;
		}
		if (t.get(v[i]+1, v[i+1]-1) > i + 1) {

		}
		else res++;
	}
	cout << res;
}

signed main() {

	GOOD_LUCK

	int tests=1;
	// cin >> tests;
	for (int i=1; i <= tests; i++) {
		_();
		cout << endl;
	}

	return 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...