Submission #1189916

#TimeUsernameProblemLanguageResultExecution timeMemory
1189916epicci23Nile (IOI24_nile)C++20
38 / 100
60 ms15544 KiB
#include "bits/stdc++.h"
#include "nile.h"
#define ll long long
#define sz(v) (ll) v.size()
#define all(v) v.begin(),v.end()
using namespace std;

const ll N = 1e5 + 5;

ll par[N], siz[N], tot, ans[N], mini[N], bsum[N];

ll find(ll a){
  if(par[a] == a) return a;
  return par[a] = find(par[a]);
}

void unite(int a,int b){
  //cout << "birles : " <<  a << ' ' << b << '\n';
  //cout << "onceki cost : " << tot << '\n';
  a=find(a),b=find(b);
  if(a==b) return;
  if(siz[a] < siz[b]) swap(a, b);
  par[b] = a;
  siz[a] += siz[b];
  //cout << "cikar : " << ans[a] + ans[b] << '\n';
  tot -= (ans[a] + ans[b]);
  mini[a] = min(mini[a], mini[b]);
  bsum[a] += bsum[b];
  ans[a] = (siz[a] % 2 ? bsum[a] + mini[a] : bsum[a]);
  tot += ans[a];
  //cout << "ekle : " << ans[a] << '\n';
  //cout << "new cost : " <<tot << '\n';
}


vector<ll> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> E){
  ll n = sz(W);
  vector<array<ll,3>> ar;

  for(int i=0;i<n;i++){
    ll a = W[i], b = B[i], c = A[i];
    ar.push_back({a, b, c});
  }

  sort(all(ar));

  ll q = sz(E);
  vector<ll> Res(q, 0);

  vector<array<ll,2>> que;

  for(int i=0;i<q;i++){
  	ll a = E[i];
  	que.push_back({a, i});
  }

  sort(all(que));
  
  tot = 0;
  for(int i=0;i<n;i++){
  	par[i] = i;
  	siz[i] = 1;
  	mini[i] = ar[i][2] - ar[i][1];
  	//cout << " i : " << mini[i] << '\n';
  	bsum[i] = ar[i][1];
  	ans[i] = ar[i][2];
  	//cout << "ansi : " << ans[i] << '\n';
  	tot += ans[i];
  }

  vector<array<ll,2>> Merge;
  for(int i=1;i<n;i++){
    Merge.push_back({ar[i][0] - ar[i - 1][0], i - 1});
  }
  sort(all(Merge));
  ll ptr = 0;

  for(auto x : que){
  	//cout << "suan : " << x[0] << '\n';
    while(ptr < sz(Merge) && Merge[ptr][0] <= x[0]){
     //cout << Merge[ptr][0] << ' ' << Merge[ptr][1] << '\n';
     unite(Merge[ptr][1], Merge[ptr][1] + 1);
     ptr++;
    }
    Res[x[1]] = tot;
  }

  return Res;
}



/*void _(){
  int n;
  cin >> n;
  vector<array<int,3>> ar;

  for(int i=0;i<n;i++){
    int a,b,c;
    cin >> a >> b >> c;
    ar.push_back({a, c, b});
  }

  sort(all(ar));

  int q; cin >> q;
  vector<int> Res(q, 0);

  vector<array<int,2>> que;

  for(int i=0;i<q;i++){
  	int a; cin >> a;
  	que.push_back({a, i});
  }

  sort(all(que));
  
  tot = 0;
  for(int i=0;i<n;i++){
  	par[i] = i;
  	siz[i] = 1;
  	mini[i] = ar[i][2] - ar[i][1];
  	//cout << " i : " << mini[i] << '\n';
  	bsum[i] = ar[i][1];
  	ans[i] = ar[i][2];
  	//cout << "ansi : " << ans[i] << '\n';
  	tot += ans[i];
  }

  vector<array<int,2>> Merge;
  for(int i=1;i<n;i++){
    Merge.push_back({ar[i][0] - ar[i - 1][0], i - 1});
  }
  sort(all(Merge));
  int ptr = 0;

  for(auto x : que){
  	//cout << "suan : " << x[0] << '\n';
    while(ptr < sz(Merge) && Merge[ptr][0] <= x[0]){
     //cout << Merge[ptr][0] << ' ' << Merge[ptr][1] << '\n';
     unite(Merge[ptr][1], Merge[ptr][1] + 1);
     ptr++;
    }
    Res[x[1]] = tot;
  }

  for(int i=0;i<q;i++){
  	cout << Res[i] << '\n';
  }
}

int32_t main(){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int tc=1;//cin >> tc;
  while(tc--) _();
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...