Submission #1357247

#TimeUsernameProblemLanguageResultExecution timeMemory
1357247nathlol2Bubble Sort 2 (JOI18_bubblesort2)C++20
100 / 100
3559 ms151792 KiB
#include "bubblesort2.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5, MX = 1e9;
map<int, set<int>> pos;

struct lazyseg{
	int seg[4 * N], lz[4 * N];
	void push(int nd, int l, int r){
		if(lz[nd] != 0){
			seg[nd] += lz[nd];
			if(l != r){
				lz[nd * 2] += lz[nd];
				lz[nd * 2 + 1] += lz[nd];
			}
			lz[nd] = 0;
		}
	}
	void upd(int nd, int l, int r, int ql, int qr, int x){
		push(nd, l, r);
		if(qr < l || r < ql) return;
		if(ql <= l && r <= qr){
			lz[nd] += x;
			push(nd, l, r);
			return;
		}
		int md = (l + r) / 2;
		upd(nd * 2, l, md, ql, qr, x);
		upd(nd * 2 + 1, md + 1, r, ql, qr, x);
		seg[nd] = max(seg[nd * 2], seg[nd * 2 + 1]); 
	}
	int qry(int n){
		push(1, 1, n);
		return seg[1];
	}
}s;

vector<int> countScans(vector<int> A, vector<int> X, vector<int> V){
	int n = A.size(), q = X.size();
	vector<int> ans(q);
	vector<int> comp = A;
	for(auto x : V) comp.push_back(x);
	sort(comp.begin(), comp.end());
	comp.erase(unique(comp.begin(), comp.end()), comp.end());
	auto id = [&](int x){
		return lower_bound(comp.begin(), comp.end(), x) - comp.begin() + 1;
	};
	int m = comp.size();
	for(int i = 0;i<n;i++){
		pos[A[i]].insert(i);
		s.upd(1, 1, m, id(A[i]), m, -1);
	}
	for(auto [el, ss] : pos){
		s.upd(1, 1, m, id(el), id(el), *ss.rbegin());
	}
	for(int i = 0;i<q;i++){
		int tb = *pos[A[X[i]]].rbegin();
		pos[A[X[i]]].erase(X[i]);
		int nw;
		if(pos[A[X[i]]].empty()) nw = 0;
		else nw = *pos[A[X[i]]].rbegin();
		s.upd(1, 1, m, id(A[X[i]]), id(A[X[i]]), nw - tb);
		int tv;
		if(pos[V[i]].empty()) tv = 0;
		else tv = *pos[V[i]].rbegin();
		pos[V[i]].insert(X[i]);
		s.upd(1, 1, m, id(V[i]), id(V[i]), *pos[V[i]].rbegin() - tv);
		if(A[X[i]] < V[i]) s.upd(1, 1, m, id(A[X[i]]), id(V[i]) - 1, 1);
		else if(V[i] < A[X[i]]) s.upd(1, 1, m, id(V[i]), id(A[X[i]]) - 1, -1);
		A[X[i]] = V[i];
		ans[i] = s.qry(m) + 1;
	}
	return ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...