Submission #721318

#TimeUsernameProblemLanguageResultExecution timeMemory
721318Abrar_Al_SamitFish 2 (JOI22_fish2)C++17
13 / 100
4069 ms8204 KiB
#include<bits/stdc++.h>
using namespace std;

const int nax = 1e5 + 3;


struct BIT {
	long long bit[nax] = {0};

	void update(int i, int val) {
		while(i<nax) {
			bit[i] += val;
			i += i&-i;
		}
	}
	long long query(int i) {
		long long ret = 0;
		while(i>0) {
			ret += bit[i];
			i -= i&-i;
		}
		return ret;
	}
	long long query(int l, int r) {
		return query(r) - query(l-1);
	}
};
long long a[nax];
int n;
bool wins[nax];
void PlayGround() {

	BIT T;
	cin>>n;
	for(int i=1; i<=n; ++i) {
		cin>>a[i];
		T.update(i, a[i]);
	}

	int q;
	cin>>q;	
	while(q--) {
		int tp;
		cin>>tp;
		if(tp==1) {
			int x, y;
			cin>>x>>y;
			T.update(x, y-a[x]);
			a[x] = y;
		} else {
			int l, r;
			cin>>l>>r;

			vector<int>ids;
			for(int i=l; i<=r; ++i) {
				ids.push_back(i);
				wins[i] = 0;
			}
			sort(ids.begin(), ids.end(), [&] (int i, int j) {
				return make_pair(a[i], i) > make_pair(a[j], j);
			});	

			set<int>cr = {l-1, r+1};
			for(int j : ids) {
				int lef = *(--cr.lower_bound(j));
				int rit = *cr.lower_bound(j);
				long long S = T.query(lef+1, rit-1);

				if(lef < l && rit > r) {
					wins[j] = 1;
				} 
				if(lef >= l) {
					if(a[lef] <= S) wins[j] = wins[lef];
				}
				if(rit <= r) {
					if(a[rit] <= S) wins[j] = wins[rit];
				} 
				cr.insert(j);
			}
			int ans = 0;
			for(int i=l; i<=r; ++i) {
				ans += wins[i];
			}
			cout<<ans<<'\n';
		}
	}

	// cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	PlayGround();
	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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...