Submission #584446

# Submission time Handle Problem Language Result Execution time Memory
584446 2022-06-27T11:53:11 Z benson1029 Dancing Elephants (IOI11_elephants) C++14
26 / 100
9000 ms 12720 KB
#include "elephants.h"
#include<bits/stdc++.h>
using namespace std;

int n;
int RTN;
int cntGRP;
int l;
int a[150005];
int grp[150005];
vector<int> grpv[150005], dis[150005], nxt[150005];
vector< pair<int,int> > v;
int round_cnt = 0;

void calcgroup(int i) {
	dis[i].resize(grpv[i].size());
	nxt[i].resize(grpv[i].size());
	int ptr = grpv[i].size()-1;
	for(int j=grpv[i].size()-1; j>=0; j--) {
		while(ptr > 0 && grpv[i][ptr] - grpv[i][j] > l) ptr--;
		if(ptr == grpv[i].size()-1) {
			dis[i][j] = 1;
			nxt[i][j] = grpv[i][j] + l + 1;
		} else {
			dis[i][j] = dis[i][ptr+1] + 1;
			nxt[i][j] = nxt[i][ptr+1];
		}
	}
}

void build() {
	v.clear();
	for(int i=0; i<n; i++) {
		v.push_back({a[i], i});
	}
	sort(v.begin(), v.end());
	for(int i=0; i<cntGRP; i++) grpv[i].clear();
	for(int i=0; i<n; i++) {
		grp[v[i].second] = i/RTN;
		grpv[i/RTN].push_back(v[i].first);
	}
	for(int i=0; i<cntGRP; i++) {
		calcgroup(i);
	}
}

void init(int N, int L, int X[])
{
	n = N; l = L;
	RTN = ceil(sqrt(n));
	cntGRP = (N + RTN - 1) / RTN;
	for(int i=0; i<n; i++) a[i] = X[i];
	build();
}

int update(int i, int y)
{
	++round_cnt;
	if(round_cnt % RTN == 0 || true) {
		a[i] = y;
		build();
	} else {
		int origgrp = 0;
		while(origgrp < cntGRP-1 && a[i] >= grpv[origgrp+1][0]) origgrp++;

		int newgrp = 0;
		while(newgrp < cntGRP-1 && y >= grpv[newgrp+1][0]) newgrp++;

		for(int j=0; j<grpv[origgrp].size(); j++) {
			if(grpv[origgrp][j] == a[i]) {
				for(int k=j+1; k<grpv[origgrp].size(); k++) grpv[origgrp][k-1] = grpv[origgrp][k];
				grpv[origgrp].pop_back();
				break;
			}
		}
		calcgroup(origgrp);

		a[i] = y;
		grpv[newgrp].push_back(y);
		int ptr = grpv[newgrp].size()-1;
		while(ptr > 0 && grpv[newgrp][ptr-1] > grpv[newgrp][ptr]) {
			swap(grpv[newgrp][ptr-1], grpv[newgrp][ptr]);
			ptr--;
		}
		calcgroup(newgrp);
	}

	// calculate answer

	int prevv = -2e9;
	int ans = 0;
	for(int i=0; i<cntGRP; i++) {
		if(grpv[i].size() == 0 || prevv >= grpv[i][grpv[i].size()-1]) {
			continue;
		}
		int pos = lower_bound(grpv[i].begin(), grpv[i].end(), prevv) - grpv[i].begin();
		ans += dis[i][pos];
		prevv = nxt[i][pos];
	}
	return ans;
}

Compilation message

elephants.cpp: In function 'void calcgroup(int)':
elephants.cpp:21:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   21 |   if(ptr == grpv[i].size()-1) {
      |      ~~~~^~~~~~~~~~~~~~~~~~~
elephants.cpp: In function 'int update(int, int)':
elephants.cpp:69:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |   for(int j=0; j<grpv[origgrp].size(); j++) {
      |                ~^~~~~~~~~~~~~~~~~~~~~
elephants.cpp:71:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   71 |     for(int k=j+1; k<grpv[origgrp].size(); k++) grpv[origgrp][k-1] = grpv[origgrp][k];
      |                    ~^~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 6 ms 10836 KB Output is correct
2 Correct 6 ms 10876 KB Output is correct
3 Correct 6 ms 10836 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 10836 KB Output is correct
2 Correct 6 ms 10876 KB Output is correct
3 Correct 6 ms 10836 KB Output is correct
4 Correct 5 ms 10876 KB Output is correct
5 Correct 5 ms 10876 KB Output is correct
6 Correct 7 ms 10892 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 10836 KB Output is correct
2 Correct 6 ms 10876 KB Output is correct
3 Correct 6 ms 10836 KB Output is correct
4 Correct 5 ms 10876 KB Output is correct
5 Correct 5 ms 10876 KB Output is correct
6 Correct 7 ms 10892 KB Output is correct
7 Execution timed out 9100 ms 12720 KB Time limit exceeded
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 10836 KB Output is correct
2 Correct 6 ms 10876 KB Output is correct
3 Correct 6 ms 10836 KB Output is correct
4 Correct 5 ms 10876 KB Output is correct
5 Correct 5 ms 10876 KB Output is correct
6 Correct 7 ms 10892 KB Output is correct
7 Execution timed out 9100 ms 12720 KB Time limit exceeded
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 10836 KB Output is correct
2 Correct 6 ms 10876 KB Output is correct
3 Correct 6 ms 10836 KB Output is correct
4 Correct 5 ms 10876 KB Output is correct
5 Correct 5 ms 10876 KB Output is correct
6 Correct 7 ms 10892 KB Output is correct
7 Execution timed out 9100 ms 12720 KB Time limit exceeded
8 Halted 0 ms 0 KB -