Submission #1296408

#TimeUsernameProblemLanguageResultExecution timeMemory
1296408Jawad_Akbar_JJSimple game (IZhO17_game)C++20
100 / 100
37 ms5312 KiB
#include <iostream>

using namespace std;
const int N = 1<<20;
int h[N], ft[N];

void Add(int i, int v){
	for (; i < N; i += i & -i)
		ft[i] += v;
}

int get(int i, int ans = 0){
	for (; i; i -= i & -i)
		ans += ft[i];
	return ans;
}

void process(int i, int v){
	if (i == 0 or h[i+1] == 0)
		return;
	Add(min(h[i], h[i+1]), v);
	Add(max(h[i], h[i+1]), -v);
}

int main(){
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	int n, q;
	cin>>n>>q;

	for (int i=1;i<=n;i++){
		cin>>h[i];
		process(i-1, 1);
	}

	for (int i=1;i<=q;i++){
		int t, id, H;
		cin>>t;

		if (t == 1){
			cin>>id>>H;
			process(id-1, -1);
			process(id, -1);
			h[id] = H;
			process(id-1, 1);
			process(id, 1);
		}
		else{
			cin>>H;
			cout<<get(H)<<'\n';
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...