제출 #1328534

#제출 시각아이디문제언어결과실행 시간메모리
1328534PieArmyMeasures (CEOI22_measures)C++20
0 / 100
165 ms29820 KiB
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)

struct Seg{
	int n,d;
	vector<int>tree,mx,mn,sum,a,b;
	void init(int N,int D){
		n=N;
		d=D;
		tree.resize(n<<2,0);
		mx.resize(n<<2,0);
		mn.resize(n<<2,0);
		sum.resize(n<<2,0);
		a.resize(n<<2,0);
		b.resize(n<<2,0);
	}
	int l,r;
	void up(int node=1,int left=0,int right=-1){
		if(right==-1)right=n-1;
		if(left==right){
			a[node]=b[node]=r;
			return;
		}
		if(l>mid)up(node*2+1,mid+1,right);
		else up(node*2,left,mid);
		a[node]=a[node*2];
		if(a[node]==0)a[node]=a[node*2+1];
		b[node]=b[node*2+1];
		if(b[node]==0)b[node]=b[node*2];
		sum[node]=sum[node*2]+sum[node*2+1];
		int ek=0;
		if(b[node*2]!=0&&a[node*2+1]!=0){
			ek=d-(a[node*2+1]-b[node*2]);
			sum[node]+=ek;
		}
		mn[node]=min(mn[node*2],sum[node*2]+ek+mn[node*2+1]);
		mx[node]=max(mx[node*2],sum[node*2]+ek+mx[node*2+1]);
		tree[node]=max(tree[node*2],sum[node*2]+ek+mx[node*2+1]-min(sum[node*2]+ek,mn[node*2]));
	}
	void update(int tar,int x){
		l=tar;r=x;
		up();
	}
};

int n,m,d;
int arr[200023],brr[200023];
map<int,int>mp;
int t=0;
Seg seg;

signed main(){
	ios_base::sync_with_stdio(23^23);cin.tie(0);
	cin>>n>>m>>d;
	for(int i=1;i<=n;i++){
		cin>>arr[i];
		mp[arr[i]]++;
	}
	for(int i=1;i<=m;i++){
		cin>>brr[i];
		mp[brr[i]]++;
	}
	for(auto&[a,b]:mp){
		t+=b;
		b=t-b;
	}
	seg.init(t,d);
	for(int i=1;i<=n;i++){
		seg.update(mp[arr[i]]++,arr[i]);
	}
	for(int i=1;i<=m;i++){
		seg.update(mp[brr[i]]++,brr[i]);
		cout<<(seg.mx[1]/2.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...