10494 2024. 04. 03 13:56:34 111 Branch Cutting cpp17 Elfogadva 100/100 314ms 21720 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

int solve1(vector<int>&v){
	int N=v.size();
	int s=min_element(v.begin(),v.end())-v.begin();
	int ans=0;
	for(int i=0,j=0;i<N;i++){
		if(v[s]<v[(s+1)%N]){
			j++;
		}
		else if(j){
			ans+=(j+1)/2;
			j=0;
		}
		s=(s+1)%N;
	}
	return ans;
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N,Q;
	cin>>N>>Q;
	vector<int>v(N),n(N),p(N);
	for(int i=0;i<N;i++){
		cin>>v[i];
		n[i]=i==N-1?0:i+1;
		p[i]=i==0?N-1:i-1;
	}
	int s=min_element(v.begin(),v.end())-v.begin();
	map<int,int>z;
	for(int i=0,j=0;i<N;i++){
		if(v[s]<v[n[s]]){
			j++;
		}
		else if(j){
			z.emplace((s-j+N)%N,s);
			j=0;
		}
		s=n[s];
	}
	int ans=0;
	for(auto[x,y]:z){
		ans+=((y-x+N)%N+1)/2;
	}
	auto ins=[&](int s,int e){
		if(s==e)return;
		ans+=((e-s+N)%N+1)/2;
		z.emplace(s,e);
	};
	cout<<ans<<' ';
	for(int i=0;i<Q;i++){
		int x;
		cin>>x>>v[x];
		if(!z.empty()){
			auto t=z.upper_bound(x);
			t=t==z.begin()?prev(z.end()):prev(t);
			int s=t->first,e=t->second;
			if(x>=s&&x<=e||x>=s&&s>e||e>=x&&s>e){
				z.erase(t);
				ans-=((e-s+N)%N+1)/2;
				if(x==s&&x==e){
				}
				else if(x==s){
					s=n[s];
					ins(s,e);
				}
				else if(x==e){
					e=p[e];
					ins(s,e);
				}
				else{
					ins(s,p[x]);
					ins(n[x],e);
				}
			}
		}
		int s=v[p[x]]<v[x]?p[x]:x;
		int e=v[x]<v[n[x]]?n[x]:x;
		if(z.empty()){
			ins(s,e);
		}
		else{
			auto t=z.upper_bound(x);
			if(t==z.end()){
				t=z.begin();
			}
			if(t->first==e){
				auto[ss,ee]=*t;
				t=z.erase(t);
				ans-=((ee-ss+N)%N+1)/2;
				e=ee;
			}
			if(!z.empty()){
				t=t==z.begin()?prev(z.end()):prev(t);
				if(t->second==s){
					auto[ss,ee]=*t;
					t=z.erase(t);
					ans-=((ee-ss+N)%N+1)/2;
					s=ss;
				}
			}
			ins(s,e);
		}
		cout<<ans<<' ';
	}
	cout<<'\n';
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 2108 KiB
2 Elfogadva 3ms 2112 KiB
subtask2 8/8
3 Elfogadva 3ms 2244 KiB
4 Elfogadva 3ms 2376 KiB
5 Elfogadva 3ms 2448 KiB
6 Elfogadva 3ms 2568 KiB
7 Elfogadva 3ms 2676 KiB
8 Elfogadva 3ms 2936 KiB
9 Elfogadva 3ms 2936 KiB
10 Elfogadva 3ms 2944 KiB
11 Elfogadva 3ms 3084 KiB
subtask3 15/15
12 Elfogadva 215ms 17612 KiB
13 Elfogadva 202ms 16828 KiB
14 Elfogadva 190ms 16040 KiB
15 Elfogadva 217ms 18412 KiB
16 Elfogadva 214ms 19064 KiB
17 Elfogadva 115ms 13208 KiB
18 Elfogadva 115ms 13116 KiB
subtask4 10/10
19 Elfogadva 3ms 3944 KiB
20 Elfogadva 3ms 4020 KiB
21 Elfogadva 4ms 4044 KiB
22 Elfogadva 4ms 3972 KiB
23 Elfogadva 4ms 3988 KiB
24 Elfogadva 3ms 3964 KiB
25 Elfogadva 3ms 3968 KiB
26 Elfogadva 4ms 4312 KiB
subtask5 25/25
27 Elfogadva 4ms 4564 KiB
28 Elfogadva 4ms 4784 KiB
29 Elfogadva 12ms 5252 KiB
30 Elfogadva 12ms 5236 KiB
31 Elfogadva 12ms 5164 KiB
32 Elfogadva 9ms 4912 KiB
33 Elfogadva 10ms 4916 KiB
34 Elfogadva 10ms 5288 KiB
subtask6 42/42
35 Elfogadva 35ms 13704 KiB
36 Elfogadva 20ms 13836 KiB
37 Elfogadva 312ms 19636 KiB
38 Elfogadva 296ms 17072 KiB
39 Elfogadva 314ms 20496 KiB
40 Elfogadva 216ms 13880 KiB
41 Elfogadva 215ms 13864 KiB
42 Elfogadva 216ms 13864 KiB
43 Elfogadva 293ms 21720 KiB