102372024-03-29 17:32:34111Egyengetőcpp17Futási hiba 0/1002.864s4820 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;

template<typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

#include "grader.h"

// #define int long long

struct Nd{
	int a,d,l,r;
};

struct ST{
	int n;
	int root;
	vector<Nd>v;
	
	ST(int n):n(n),root(0),v(1){
	}
	
	void update(int&i,int l,int r,int ll,int rr){
		if(l>rr||r<ll){
			return;
		}
		if(!i){
			i=v.size();
			v.emplace_back();
		}
		if(l>=ll&&r<=rr){
			v[i].a+=l-ll;
			v[i].d+=1;
			return;
		}
		update(v[i].l,l,(l+r)/2,ll,rr);
		update(v[i].r,(l+r)/2+1,r,ll,rr);
	}
	
	void update(int ll,int rr){
		update(root,0,n-1,ll,rr);
	}
	
	int64_t query(int&i,int l,int r,int ii){
		if(!i||l>ii||r<ii){
			return 0;
		}
		int64_t ans=v[i].a+(int64_t)v[i].d*(ii-l);
		if(l==r){
			return ans;
		}
		if(ii<=(l+r)/2){
			ans+=query(v[i].l,l,(l+r)/2,ii);
		}
		else{
			ans+=query(v[i].r,(l+r)/2+1,r,ii);
		}
		return ans;
	}
	
	int64_t query(int ii){
		return query(root,0,n-1,ii);
	}
};

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N=getN(),K=getK(),M=4e8;
	ST a(M+1),b(M+1);
	auto calc=[&](int x)->int64_t{
		return a.query(x)+b.query(M/2-(x+K));
	};
	ordered_set<int>v;
	for(int i=0;i<N;i++){
		int y=Data();
		v.insert(y);
		v.insert(y-K);
		a.update(y,M);
		b.update(M/2-y,M);
		int l=0,h=v.size()-1;
		while(h-l>=3){
			int m1=l+(h-l)/3;
			int m2=h-(h-l)/3;
			if(calc(*v.find_by_order(m1))<=calc(*v.find_by_order(m2))){
				h=m2;
			}
			else{
				l=m1;
			}
		}
		int64_t ans=1e18;
		for(int i=l;i<=h;i++){
			ans=min(ans,calc(*v.find_by_order(i)));
		}
		Solution(ans);
	}
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1900 KiB
2Elfogadva3ms2100 KiB
subtask20/20
3Elfogadva4ms2472 KiB
4Elfogadva6ms2696 KiB
5Elfogadva8ms2964 KiB
6Elfogadva9ms3036 KiB
7Elfogadva13ms3092 KiB
8Futási hiba19ms3692 KiB
subtask30/20
9Elfogadva17ms3152 KiB
10Futási hiba9ms3908 KiB
11Elfogadva23ms3724 KiB
12Elfogadva27ms3648 KiB
13Elfogadva27ms3640 KiB
14Elfogadva21ms3656 KiB
subtask40/20
15Elfogadva108ms3644 KiB
16Futási hiba8ms4312 KiB
17Elfogadva156ms3604 KiB
18Futási hiba14ms4288 KiB
19Futási hiba19ms4316 KiB
20Futási hiba28ms4568 KiB
subtask50/40
21Futási hiba57ms4820 KiB
22Elfogadva2.555s3800 KiB
23Elfogadva2.864s3716 KiB
24Elfogadva2.848s3684 KiB
25Futási hiba14ms4716 KiB
26Futási hiba14ms4676 KiB