Submission #1011202

#TimeUsernameProblemLanguageResultExecution timeMemory
1011202pccEmployment (JOI16_employment)C++17
100 / 100
169 ms17812 KiB
#include <bits/stdc++.h>
using namespace std;

#define pii pair<int,int>
#define fs first
#define sc second
#define _all(T) T.begin(),T.end()

const int mxn = 2e5+10;
const int LEN = 1e6;

struct BIT{
	int bit[LEN];
	BIT(){
		memset(bit,0,sizeof(bit));
	}
	void modify(int p,int v){
		for(;p<LEN;p+=p&-p)bit[p] += v;
		return;
	}
	int getval(int s,int e = -1){
		if(e==-1)swap(s,e);
		int re = 0;
		for(;e>0;e-= e&-e)re += bit[e];
		s--;
		for(;s>0;s-= s&-s)re -= bit[s];
		return re;
	}
};

int arr[mxn];
BIT bit1,bit2;
int N,Q;
vector<int> all;
pii req[mxn];

int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>N>>Q;
	for(int i = 1;i<=N;i++){
		cin>>arr[i];
		all.push_back(arr[i]);
	}
	all.push_back(-1);
	for(int i = 1;i<=Q;i++){
		int t;
		cin>>t;
		if(t == 2){
			int a,b;
			cin>>a>>b;
			req[i] = pii(a,b);
			all.push_back(b);
		}
		else{
			int k;
			cin>>k;
			all.push_back(k);
			req[i] = pii(-1,k);
		}
	}
	sort(_all(all));all.resize(unique(_all(all))-all.begin());
	for(int i = 0;i<=N+1;i++){
		arr[i] = lower_bound(_all(all),arr[i])-all.begin();
		bit2.modify(arr[i],1);
	}
	for(int i = 1;i<=N+1;i++){
		bit1.modify(min(arr[i],arr[i-1]),1);
	}
	for(int i = 1;i<=Q;i++){
		req[i].sc = lower_bound(_all(all),req[i].sc)-all.begin();
		if(req[i].fs<0){
			int tar = req[i].sc;
			cout<<bit2.getval(tar,all.size())-bit1.getval(tar,all.size())<<'\n';
		}
		else{
			auto [pos,val] = req[i];
			bit2.modify(arr[pos],-1);
			bit1.modify(min(arr[pos],arr[pos-1]),-1);
			bit1.modify(min(arr[pos],arr[pos+1]),-1);
			arr[pos] = val;
			bit2.modify(arr[pos],1);
			bit1.modify(min(arr[pos],arr[pos-1]),1);
			bit1.modify(min(arr[pos],arr[pos+1]),1);
		}
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...