Submission #364742

# Submission time Handle Problem Language Result Execution time Memory
364742 2021-02-09T21:00:54 Z r57shell Bubble Sort 2 (JOI18_bubblesort2) C++14
0 / 100
761 ms 524292 KB
#include "bubblesort2.h"
#include <cstdio>
#include <string>
#include <set>
#include <algorithm>

using namespace std;

static int stupid(vector<int> A)
{
	int res = 0;
	int n = A.size();
	while (true)
	{
		bool was = false;
		for (int i = 1; i < n; ++i)
		{
			if (A[i-1] > A[i])
			{
				swap(A[i-1], A[i]);
				was = true;
			}
		}
		if (was)
			++res;
		else
			break;
	}
	return res;
}

static int get(vector<int> &f, int x)
{
	int res = 0;
	for (; x >= 0; x = (x&(x+1))-1)
		res += f[x];
	return res;
}

static void add(vector<int> &f, int x, int v)
{
	for (; x < f.size(); x |= (x+1))
		f[x] += v;
}

static int stupid1(vector<int> A)
{
	int n = A.size();
	int res = 0;
	for (int i = 1; i < n; ++i)
	{
		int c = 0;
		for (int j = 0; j < i; ++j)
			if (A[i] < A[j])
				++c;
		res = max(res, c);
	}
	return res;
}

static int smart(const vector<int> &A, vector<int> &F, const vector<int> &all)
{
	int n = A.size();
	int res = 0;
	for (int i = 0; i < n; ++i)
	{
		res = max(res, i - get(F, A[i]));
		add(F, A[i], 1);
	}
	for (int i = 0; i < n; ++i)
		add(F, A[i], -1);
	return res;
}

static int smart1(const vector<int> &A)
{
	int n = A.size();
	int res = 0;
	int p = int(2e9);
	for (int i = n - 1; i > 0; --i)
	{
		if (A[i] < p)
		{
			p = A[i];
			int c = 0;
			for (int j = 0; j < i; ++j)
				if (A[i] < A[j])
					++c;
			res = max(res, c);
		}
	}
	return res;
}

void merge(vector<int> &res, const vector<int> &a, const vector<int> &b)
{
	int i, j, k;
	res.resize(a.size()+b.size());
	k = 0;
	for (i = 0, j = 0; i < a.size() && j < b.size(); )
	{
		if (a[i] <= b[j])
			res[k++] = a[i++];
		else
			res[k++] = b[j++];
	}
	for (; i < a.size(); ++i, ++k)
		res[k] = a[i];
	for (; j < b.size(); ++j, ++k)
		res[k] = b[j];
}

static int smart2(const vector<int> &A, vector<vector<int>> &T)
{
	int n = A.size();
	int res = 0;
	int p = int(2e9);
	for (int i = 0; i < n; ++i)
		T[i+n].assign(1, A[i]);
	for (int i = n - 1; i > 0; --i)
		merge(T[i], T[i*2], T[i*2+1]);
	for (int i = n - 1; i > 0; --i)
	{
		if (A[i] < p)
		{
			p = A[i];
			int c = 0;
			int l = 0 + n;
			int r = i + n;
			while (l <= r)
			{
				if (l&1)
					c += T[l].size() - (lower_bound(T[l].begin(), T[l].end(), p + 1) - T[l].begin());
				if (!(r&1))
					c += T[r].size() - (lower_bound(T[r].begin(), T[r].end(), p + 1) - T[r].begin());
				l = (l+1)/2;
				r = (r-1)/2;
			}
			res = max(res, c);
		}
	}
	return res;
}

static int smart3(const vector<int> &A, vector<vector<int>> &T)
{
	int n = A.size();
	int res = 0;
	int p = int(2e9);
	for (int i = 0; i < n; ++i)
		T[i].clear();
	/*for (int i = 0; i < n; ++i)
		printf("%d ", A[i]);
	printf("\n");*/
	vector<int> v, v1;
	for (int i = 0; i < n; ++i)
	{
		//for (int x = i; x < n; x = (x|(x+1)))
		//	T[x].push_back(A[i]);
			//T[x].insert(lower_bound(T[x].begin(), T[x].end(), A[i]), A[i]);
		v.assign(1, A[i]);
		v1.clear();
		int y = (i&(i+1))-1;
		for (int x = i - 1; x > y; x = (x&(x+1))-1)
		{
			merge(v1, v, T[x]);
			swap(v1, v);
		}
		T[i] = v;
	}
	for (int i = n - 1; i > 0; --i)
	{
		if (A[i] < p)
		{
			p = A[i];
			int c = 0;
			for (int x = i; x >= 0; x = (x&(x+1))-1)
				c += T[x].size() - (lower_bound(T[x].begin(), T[x].end(), p + 1) - T[x].begin());
			res = max(res, c);
		}
	}
	return res;
}

struct node
{
	node *left;
	node *right;
	int h;
	int v;
	int v1;
	int sz;
	int pv;
	int mv;
};

void traverse(node *a)
{
	if (!a)
		return;
	traverse(a->left);
	printf("%d ", a->v);
	fflush(stdout);
	traverse(a->right);
}

string tostr(node *a)
{
	if (!a)
		return string();
	string r = tostr(a->left);
	char tmp[20];
	sprintf(tmp," (%d, %d, %d, %d)", a->v, a->v1, a->mv, a->pv);
	r += tmp;
	return r + tostr(a->right);
}

vector<int> grab(node *a, int pv)
{
	if (!a)
		return vector<int>();
	vector<int> r = grab(a->left, pv+a->pv);
	r.push_back(pv+a->v1);
	vector<int> rb = grab(a->right, pv+a->pv);
	for (int i = 0; i < rb.size(); ++i)
		r.push_back(rb[i]);
	return r;
}

node * merge(node *a, node *b)
{
	if (!a)
		return b;
	if (!b)
		return a;
	node *r = new node();
	//vector<int> qwe = grab(a,0);
	//vector<int> qwe1 = grab(b,0);
	//for (int i = 0; i < qwe1.size(); ++i)
	//	qwe.push_back(qwe1[i]);
	if (a->h < b->h)
	{
		*r = *a;
		node *a_right = a->right;
		if (r->pv)
		{
			int delta = r->pv;
			if (a->left)
			{
				node *nl = new node();
				*nl = *a->left;
				nl->pv += delta;
				nl->mv += delta;
				nl->v1 += delta;
				r->left = nl;
			}
			if (a->right)
			{
				a_right = new node();
				*a_right = *a->right;
				a_right->pv += delta;
				a_right->mv += delta;
				a_right->v1 += delta;
			}
			r->pv = 0;
		}
		r->right = merge(a_right, b);
	}
	else
	{
		*r = *b;
		node *b_left = b->left;
		if (r->pv)
		{
			int delta = r->pv;
			if (b->right)
			{
				node *nr = new node();
				*nr = *b->right;
				nr->pv += delta;
				nr->mv += delta;
				nr->v1 += delta;
				r->right = nr;
			}
			if (b->left)
			{
				b_left = new node();
				*b_left = *b->left;
				b_left->pv += delta;
				b_left->mv += delta;
				b_left->v1 += delta;
			}
			r->pv = 0;
		}
		r->left = merge(a, b_left);
	}
	r->sz = 1;
	r->mv = r->v1;
	if (r->left)
	{
		r->sz += r->left->sz;
		r->mv = max(r->mv, r->left->mv);
	}
	if (r->right)
	{
		r->sz += r->right->sz;
		r->mv = max(r->mv, r->right->mv);
	}
	/*vector<int> qwe2 = grab(r,0);
	int mmm = int(-1e9);
	for (int i = 0; i < qwe.size(); ++i)
		mmm = max(mmm, qwe[i]);
	if (qwe != qwe2 || r->mv != mmm)
	{
		printf("======= wrong ==== %d %d\n", r->mv, mmm);
		for (int i = 0; i < qwe.size(); ++i)
			printf("%d ", qwe[i]);
		printf("\n");
		for (int i = 0; i < qwe2.size(); ++i)
			printf("%d ", qwe2[i]);
		printf("\n [%s] [%s]\n", tostr(a).c_str(), tostr(b).c_str());
	}*/
	return r;
}

pair<node*,node*> split(node *a, int x)
{
	if (!a)
		return pair<node*,node*>((node*)0, (node*)0);
	pair<node*,node*> tmp;
	//vector<int> qwe = grab(a,0);
	//pair<node*,node*> ans;
	if (x <= a->v)
	{
		node * a_left = a->left;
		if (a->pv && a_left)
		{
			int pv = a->pv;
			a_left = new node();
			*a_left = *a->left;
			a_left->pv += pv;
			a_left->mv += pv;
			a_left->v1 += pv;
		}
		tmp = split(a_left,x);
		node * z = new node();
		*z = *a;
		z->left = NULL;
		if (a->left)
			z->sz -= a->left->sz;
		z->mv = z->v1;
		if (z->right)
			z->mv = max(z->mv, z->right->mv + z->pv);
		return pair<node*,node*>(tmp.first, merge(tmp.second,z));
	}
	else
	{
		node *a_right = a->right;
		if (a->pv && a_right)
		{
			int pv = a->pv;
			a_right = new node();
			*a_right = *a->right;
			a_right->pv += pv;
			a_right->mv += pv;
			a_right->v1 += pv;
		}
		tmp = split(a_right,x);
		node * z = new node();
		*z = *a;
		z->right = NULL;
		if (a->right)
			z->sz -= a->right->sz;
		z->mv = z->v1;
		if (z->left)
			z->mv = max(z->mv, z->left->mv + z->pv);
		return pair<node*,node*>(merge(z, tmp.first), tmp.second);
	}
	/*vector<int> qwe1 = grab(ans.first,0);
	vector<int> qwe2 = grab(ans.second,0);
	for (int i = 0; i < qwe2.size(); ++i)
		qwe1.push_back(qwe2[i]);
	if (qwe1 != qwe)
	{
		printf("======= wrong split ====\n");
		for (int i = 0; i < qwe.size(); ++i)
			printf("%d ", qwe[i]);
		printf("\n");
		for (int i = 0; i < qwe1.size(); ++i)
			printf("%d ", qwe1[i]);
		printf("\n [%s] %d\n", tostr(a).c_str(), x);
	}
	return ans;*/
}

node * removefirst(node *a)
{
	//string z = tostr(a);
	node *r = NULL;
	//string ll = tostr(a->left);
	//string rr = tostr(a->right);
	if (a->left)
	{
		node *q = new node();
		*q = *a;
		q->left = NULL;
		q->sz -= a->left->sz;
		r = merge(removefirst(a->left), q);
	}
	else
		r = a->right;
	//printf("remove first (%s) (%s) (%s) = %s\n", z.c_str(), ll.c_str(), rr.c_str(), tostr(r).c_str());
	return r;
}

int getsz(node *a, int x)
{
	if (!a)
		return 0;
	if (a->v < x)
		return (a->left ? a->left->sz : 0) + 1 + getsz(a->right, x);
	return getsz(a->left, x);
}

static int smart4(const vector<int> &A)
{
	int n = A.size();
	int res = 0;
	int p = int(2e9);
	vector<node*> D(2*n);
	{
		vector<vector<int>> T(2*n);
		/*for (int i = 0; i < n; ++i)
			printf("%d ", A[i]);
		printf("\n");*/
		vector<int> v, v1;
		for (int i = 0; i < n; ++i)
		{
			//for (int x = i; x < n; x = (x|(x+1)))
			//	T[x].push_back(A[i]);
				//T[x].insert(lower_bound(T[x].begin(), T[x].end(), A[i]), A[i]);
			v.assign(1, A[i]);
			v1.clear();
			int y = (i&(i+1))-1;
			for (int x = i - 1; x > y; x = (x&(x+1))-1)
			{
				merge(v1, v, T[x]);
				swap(v1, v);
			}
			T[i] = v;
			D[i] = NULL;
			for (int j = 0; j < v.size(); ++j)
			{
				node *nd = new node();
				nd->h = rand()*32000+rand();
				nd->v = v[j];
				nd->left = NULL;
				nd->right = NULL;
				nd->sz = 1;
				D[i] = merge(D[i], nd);
			}
		}
	}
	for (int i = n - 1; i > 0; --i)
	{
		if (A[i] < p)
		{
			p = A[i];
			int c = 0;
			for (int x = i; x >= 0; x = (x&(x+1))-1)
			{
				//printf("%d %d\n",T[x].size() - (lower_bound(T[x].begin(), T[x].end(), p + 1) - T[x].begin()),D[x]->sz - getsz(D[x], p+1));
				c += D[x]->sz - getsz(D[x], p+1);
			}
			res = max(res, c);
		}
	}
	return res;
}

static int smart5(const vector<int> &A, vector<node*> &D)
{
	int n = A.size();
	int res = 0;
	int p = int(2e9);
	if (D.size() == 0)
	{
		D.resize(2*n);
		vector<vector<int>> T(2*n);
		/*for (int i = 0; i < n; ++i)
			printf("%d ", A[i]);
		printf("\n");*/
		vector<int> v, v1;
		for (int i = 0; i < n; ++i)
		{
			//for (int x = i; x < n; x = (x|(x+1)))
			//	T[x].push_back(A[i]);
				//T[x].insert(lower_bound(T[x].begin(), T[x].end(), A[i]), A[i]);
			v.assign(1, A[i]);
			v1.clear();
			int y = (i&(i+1))-1;
			for (int x = i - 1; x > y; x = (x&(x+1))-1)
			{
				merge(v1, v, T[x]);
				swap(v1, v);
			}
			T[i] = v;
			D[i] = NULL;
			for (int j = 0; j < v.size(); ++j)
			{
				node *nd = new node();
				nd->h = rand()*32000+rand();
				nd->v = v[j];
				nd->left = NULL;
				nd->right = NULL;
				nd->sz = 1;
				D[i] = merge(D[i], nd);
			}
		}
	}
	for (int i = n - 1; i > 0; --i)
	{
		if (A[i] < p)
		{
			p = A[i];
			int c = 0;
			for (int x = i; x >= 0; x = (x&(x+1))-1)
			{
				//printf("%d %d\n",T[x].size() - (lower_bound(T[x].begin(), T[x].end(), p + 1) - T[x].begin()),D[x]->sz - getsz(D[x], p+1));
				c += D[x]->sz - getsz(D[x], p+1);
			}
			res = max(res, c);
		}
	}
	return res;
}

vector<int> countScans1(vector<int> A, vector<int> X, vector<int> V)
{
	int Q = X.size();
	int N = A.size();
	vector<int> answer(Q);
	vector<node*> D;
	//vector<vector<int>> T(N);
	for (int j = 0; j < Q; ++j)
	{
		//printf("j %d\n", j);
		if (j != 0)
		{
			//for (int x = 0; x < N; ++x)
			//	printf("%d ", A[x]);
			//printf("\n");
			//printf("X[%d] = %d V[%d] = %d\n", j, X[j], j, V[j]);
			for (int x = X[j]; x < N; x = (x|(x+1)))
			{
				//printf("D[%d] = %d (sz = %d)\n", x, D[x], D[x]->sz);
				//traverse(D[x]);
				//printf("\n");
				pair<node*,node*> tmp = split(D[x], A[X[j]]);
				//traverse(tmp.first);
				//printf(", ");
				//traverse(tmp.second);
				//printf("\n");
				tmp.second = removefirst(tmp.second);
				//traverse(tmp.second);
				//printf("\n");
				node * q = merge(tmp.first, tmp.second);
				//printf("=");
				//traverse(q);
				//printf("\n");
				tmp = split(q,V[j]);
				node * nn = new node();
				nn->h = rand()*32000+rand();
				nn->left = 0;
				nn->right = 0;
				nn->sz = 1;
				nn->v = V[j];
				//printf("D[%d] = ", x);
				D[x] = merge(merge(tmp.first, nn), tmp.second);
				//traverse(D[x]);
				//printf("\n");
			}
		}
		A[X[j]] = V[j];
		answer[j] = smart5(A, D);
	}
	return answer;
}

node* getleft(node *a)
{
	if (a->left)
		return getleft(a->left);
	return a;
}

vector<node*> DS;
vector<vector<pair<int,int>>> DP;

void apply_push(int x)
{
	vector<pair<int,int>> &v = DP[x];
	for (int i = 0; i < v.size(); ++i)
	{
		int a = v[i].first;
		int delta = v[i].second;
		if (x*2+1 < DP.size())
		{
			DP[x*2].push_back(v[i]);
			DP[x*2+1].push_back(v[i]);
		}
		//printf("before split DS[%d] \"%s\" (%d, %d)\n", x, tostr(DS[x]).c_str(), a, delta);
		pair<node*,node*> q = split(DS[x], a);
		//printf("after split \"%s\" (%d, %d) \"%s\"\n", tostr(q.first).c_str(), a, delta, tostr(q.second).c_str());
		if (q.first)
		{
			node *nn = new node();
			*nn = *(q.first);
			nn->pv += delta;
			nn->mv += delta;
			nn->v1 += delta;
			DS[x] = merge(nn, q.second);
		}
		else
			DS[x] = q.second;
		//printf("result \"%s\"\n", tostr(DS[x]).c_str());
	}
	v.clear();
}

void merge_seq(int x)
{
	apply_push(x*2+1);
	node *right = DS[x*2+1];
	int cut;
	if (right)
		cut = getleft(right)->v;
	else
		cut = int(2e9);
	apply_push(x*2);
	node *left = DS[x*2];
	pair<node*, node*> tmp = split(left, cut);
	DS[x] = merge(tmp.first, right);
}

void add_ab(int x, int a, int v)
{
	DP[x].push_back(pair<int,int>(a,v));
}

void dsupdate(int x, int pos, int was, int now, int inv, int L, int R)
{
	//printf("%d %d %d\n", x, L, R);
	if (R < pos)
		return;
	if (pos < L)
	{
		add_ab(x, was, -1);
		add_ab(x, now, 1);
		return;
	}
	if (L == R)
	{
		DP[x].clear();
		node * nn = new node();
		*nn = *(DS[x]);
		nn->v = now;
		nn->v1 = inv;
		nn->pv = 0;
		nn->mv = inv;
		DS[x] = nn;
		return;
	}
	int z = DP[x].size();
	for (int i = 0; i < z; ++i)
	{
		DP[2*x].push_back(DP[x][i]);
		DP[2*x+1].push_back(DP[x][i]);
	}
	DP[x].clear();
	int m = (L + R)/2;
	dsupdate(2 * x, pos, was, now, inv, L, m);
	dsupdate(2 * x + 1, pos, was, now, inv, m + 1, R);
	merge_seq(x);
	//printf("DS[%d]=%s\n",x,tostr(DS[x]).c_str());
}


vector<int> countScans(vector<int> A, vector<int> X, vector<int> V)
{
	int Q = X.size();
	int N = A.size();
	vector<int> answer(Q);
	vector<node*> D(N);
	int TSTART = 2;
	while (TSTART / 2 < N)
		TSTART *= 2;
	DS.resize(2*TSTART);
	DP.resize(2*TSTART);
	for (int j = 0; j < Q; ++j)
	{
		//printf("j %d\n", j);
		if (j == 0)
		{
			vector<vector<int>> T(2*N);
			A[X[j]] = V[j];
			/*for (int i = 0; i < N; ++i)
				printf("%d ", A[i]);
			printf("\n");*/
			vector<int> v, v1;
			for (int i = 0; i < N; ++i)
			{
				//for (int x = i; x < n; x = (x|(x+1)))
				//	T[x].push_back(A[i]);
					//T[x].insert(lower_bound(T[x].begin(), T[x].end(), A[i]), A[i]);
				v.assign(1, A[i]);
				v1.clear();
				int y = (i&(i+1))-1;
				for (int x = i - 1; x > y; x = (x&(x+1))-1)
				{
					merge(v1, v, T[x]);
					swap(v1, v);
				}
				T[i] = v;
				D[i] = NULL;
				for (int j = 0; j < v.size(); ++j)
				{
					node *nd = new node();
					nd->h = rand()*32000+rand();
					nd->v = v[j];
					nd->left = NULL;
					nd->right = NULL;
					nd->sz = 1;
					D[i] = merge(D[i], nd);
				}
			}
			for (int i = 0; i < N; ++i)
			{
				int p = A[i];
				int c = 0;
				for (int x = i; x >= 0; x = (x&(x+1))-1)
				{
					//printf("%d %d\n",T[x].size() - (lower_bound(T[x].begin(), T[x].end(), p + 1) - T[x].begin()),D[x]->sz - getsz(D[x], p+1));
					c += D[x]->sz - getsz(D[x], p+1);
				}
				node *nd = new node();
				nd->h = rand()*32000+rand();
				nd->v = A[i];
				nd->v1 = c;
				nd->pv = 0;
				nd->mv = c;
				nd->sz = 1;
				DS[i+TSTART] = nd;
			}
			for (int i = TSTART-1; i > 0; --i)
			{
				//printf("merge_seq(%d) =", i);
				merge_seq(i);
				//printf("%s\n", tostr(DS[i]).c_str());
			}
		}
		else
		{
			/*for (int x = 0; x < N; ++x)
				printf("%d ", A[x]);
			printf("\n");
			printf("X[%d] = %d V[%d] = %d\n", j, X[j], j, V[j]);*/
			int awas = A[X[j]];
			for (int x = X[j]; x < N; x = (x|(x+1)))
			{
				//printf("D[%d] = %d (sz = %d)\n", x, D[x], D[x]->sz);
				//traverse(D[x]);
				//printf("\n");
				pair<node*,node*> tmp = split(D[x], awas);
				//traverse(tmp.first);
				//printf(", ");
				//traverse(tmp.second);
				//printf("\n");
				tmp.second = removefirst(tmp.second);
				//traverse(tmp.second);
				//printf("\n");
				node * q = merge(tmp.first, tmp.second);
				//printf("=");
				//traverse(q);
				//printf("\n");
				tmp = split(q,V[j]);
				node * nn = new node();
				nn->h = rand()*32000+rand();
				nn->left = 0;
				nn->right = 0;
				nn->sz = 1;
				nn->v = V[j];
				//printf("D[%d] = ", x);
				D[x] = merge(merge(tmp.first, nn), tmp.second);
				//traverse(D[x]);
				//printf("\n");
			}
			{
				int p = V[j];
				int c = 0;
				for (int x = X[j]; x >= 0; x = (x&(x+1))-1)
				{
					//printf("yo %d %s\n", x, tostr(D[x]).c_str());
					//printf("%d %d\n",T[x].size() - (lower_bound(T[x].begin(), T[x].end(), p + 1) - T[x].begin()),D[x]->sz - getsz(D[x], p+1));
					c += D[x]->sz - getsz(D[x], p+1);
				}
				//printf("dsupdate inv = %d\n", c);
				dsupdate(1, X[j], awas, V[j], c, 0, TSTART-1);
			}
			/*{
				int x = TSTART + X[j];
				node * nn = new node();
				*nn = *(DS[x]);
				nn->v = V[j];
				nn->mv = v;
				while( x > 1 )
				{
					x /= 2;
					merge_seq(x);
				}
			}*/
		}
		A[X[j]] = V[j];
		apply_push(1);
		//printf("ans=%d\n", DS[1]->mv);
		answer[j] = DS[1]->mv;//smart5(A, D);
	}
	return answer;
}

Compilation message

bubblesort2.cpp: In function 'void add(std::vector<int>&, int, int)':
bubblesort2.cpp:42:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |  for (; x < f.size(); x |= (x+1))
      |         ~~^~~~~~~~~~
bubblesort2.cpp: In function 'void merge(std::vector<int>&, const std::vector<int>&, const std::vector<int>&)':
bubblesort2.cpp:100:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  100 |  for (i = 0, j = 0; i < a.size() && j < b.size(); )
      |                     ~~^~~~~~~~~~
bubblesort2.cpp:100:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  100 |  for (i = 0, j = 0; i < a.size() && j < b.size(); )
      |                                     ~~^~~~~~~~~~
bubblesort2.cpp:107:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  107 |  for (; i < a.size(); ++i, ++k)
      |         ~~^~~~~~~~~~
bubblesort2.cpp:109:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  109 |  for (; j < b.size(); ++j, ++k)
      |         ~~^~~~~~~~~~
bubblesort2.cpp: In function 'std::vector<int> grab(node*, int)':
bubblesort2.cpp:225:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  225 |  for (int i = 0; i < rb.size(); ++i)
      |                  ~~^~~~~~~~~~~
bubblesort2.cpp: In function 'int smart4(const std::vector<int>&)':
bubblesort2.cpp:452:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  452 |    for (int j = 0; j < v.size(); ++j)
      |                    ~~^~~~~~~~~~
bubblesort2.cpp: In function 'int smart5(const std::vector<int>&, std::vector<node*>&)':
bubblesort2.cpp:509:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  509 |    for (int j = 0; j < v.size(); ++j)
      |                    ~~^~~~~~~~~~
bubblesort2.cpp: In function 'void apply_push(int)':
bubblesort2.cpp:603:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  603 |  for (int i = 0; i < v.size(); ++i)
      |                  ~~^~~~~~~~~~
bubblesort2.cpp:607:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  607 |   if (x*2+1 < DP.size())
      |       ~~~~~~^~~~~~~~~~~
bubblesort2.cpp: In function 'std::vector<int> countScans(std::vector<int>, std::vector<int>, std::vector<int>)':
bubblesort2.cpp:726:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  726 |     for (int j = 0; j < v.size(); ++j)
      |                     ~~^~~~~~~~~~
bubblesort2.cpp: At global scope:
bubblesort2.cpp:425:12: warning: 'int smart4(const std::vector<int>&)' defined but not used [-Wunused-function]
  425 | static int smart4(const vector<int> &A)
      |            ^~~~~~
bubblesort2.cpp:145:12: warning: 'int smart3(const std::vector<int>&, std::vector<std::vector<int> >&)' defined but not used [-Wunused-function]
  145 | static int smart3(const vector<int> &A, vector<vector<int>> &T)
      |            ^~~~~~
bubblesort2.cpp:113:12: warning: 'int smart2(const std::vector<int>&, std::vector<std::vector<int> >&)' defined but not used [-Wunused-function]
  113 | static int smart2(const vector<int> &A, vector<vector<int>> &T)
      |            ^~~~~~
bubblesort2.cpp:75:12: warning: 'int smart1(const std::vector<int>&)' defined but not used [-Wunused-function]
   75 | static int smart1(const vector<int> &A)
      |            ^~~~~~
bubblesort2.cpp:61:12: warning: 'int smart(const std::vector<int>&, std::vector<int>&, const std::vector<int>&)' defined but not used [-Wunused-function]
   61 | static int smart(const vector<int> &A, vector<int> &F, const vector<int> &all)
      |            ^~~~~
bubblesort2.cpp:46:12: warning: 'int stupid1(std::vector<int>)' defined but not used [-Wunused-function]
   46 | static int stupid1(vector<int> A)
      |            ^~~~~~~
bubblesort2.cpp:9:12: warning: 'int stupid(std::vector<int>)' defined but not used [-Wunused-function]
    9 | static int stupid(vector<int> A)
      |            ^~~~~~
# Verdict Execution time Memory Grader output
1 Correct 61 ms 41964 KB Output is correct
2 Correct 134 ms 88812 KB Output is correct
3 Correct 594 ms 433480 KB Output is correct
4 Correct 588 ms 422932 KB Output is correct
5 Correct 526 ms 372972 KB Output is correct
6 Correct 575 ms 403456 KB Output is correct
7 Correct 657 ms 477204 KB Output is correct
8 Correct 653 ms 455744 KB Output is correct
9 Correct 514 ms 360216 KB Output is correct
10 Correct 686 ms 520924 KB Output is correct
11 Correct 714 ms 524040 KB Output is correct
12 Runtime error 687 ms 524292 KB Execution killed with signal 9
13 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 61 ms 41964 KB Output is correct
2 Correct 134 ms 88812 KB Output is correct
3 Correct 594 ms 433480 KB Output is correct
4 Correct 588 ms 422932 KB Output is correct
5 Correct 526 ms 372972 KB Output is correct
6 Correct 575 ms 403456 KB Output is correct
7 Correct 657 ms 477204 KB Output is correct
8 Correct 653 ms 455744 KB Output is correct
9 Correct 514 ms 360216 KB Output is correct
10 Correct 686 ms 520924 KB Output is correct
11 Correct 714 ms 524040 KB Output is correct
12 Runtime error 687 ms 524292 KB Execution killed with signal 9
13 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 761 ms 524292 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 61 ms 41964 KB Output is correct
2 Correct 134 ms 88812 KB Output is correct
3 Correct 594 ms 433480 KB Output is correct
4 Correct 588 ms 422932 KB Output is correct
5 Correct 526 ms 372972 KB Output is correct
6 Correct 575 ms 403456 KB Output is correct
7 Correct 657 ms 477204 KB Output is correct
8 Correct 653 ms 455744 KB Output is correct
9 Correct 514 ms 360216 KB Output is correct
10 Correct 686 ms 520924 KB Output is correct
11 Correct 714 ms 524040 KB Output is correct
12 Runtime error 687 ms 524292 KB Execution killed with signal 9
13 Halted 0 ms 0 KB -