Submission #340735

#TimeUsernameProblemLanguageResultExecution timeMemory
340735NachoLibreHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
77 / 100
2293 ms74048 KiB
#include <bits/stdc++.h>
using namespace std;

struct vwv {
	vwv *l, *r;
	int sp;
	vector<int> v;

	int ld, rd;
	void P() {
		for(int i = 0; i < r->v.size(); ++i) {
			if(r->v[i] < l->v[l->v.size() - 1]) {
				sp = r->v[i] + l->v[l->v.size() - 1];
			}
		}
		sp = max(sp, max(l->sp, r->sp));
		ld = 0, rd = 0;
		while(ld < l->v.size() || rd < r->v.size()) {
			if(ld == l->v.size()) {
				v.push_back(r->v[rd]);
				++rd;
			} else if(rd == r->v.size()) {
				v.push_back(l->v[ld]);
				++ld;
			} else if(l->v[ld] < r->v[rd]) {
				v.push_back(l->v[ld]);
				++ld;
			} else {
				v.push_back(r->v[rd]);
				++rd;
			}
		}
	}
} *rt;

pair<int, int> G(pair<int, int> a, pair<int, int> b) {
	pair<int, int> c;
	if(a.first == -2) c = b;
	else if(b.first == -2) c = a;
	else if(a.first == -1 || b.first == -1) {
		c.first = -1;
	} else {
		if(a.second <= b.first) {
			c.first = a.first;
			c.second = b.second;
		} else {
			c.first = -1;
		}
	}
	return c;
}

struct vov {
	vov *l, *r;
	pair<int, int> s;

	void P() {
		s = G(l->s, r->s);
	}
} *rtt;

const int N = 1000006;
int a[N];

void bid(int l, int r, vwv *&t) {
	t = new vwv();
	if(l == r) {
		t->v.push_back(a[l]);
		return;
	}
	bid(l, (l + r) / 2, t->l);
	bid((l + r) / 2 + 1, r, t->r);
	t->P();
}

int n, m;

vector<vwv*> v;

int sl, sr;
void chy(int l, int r, vwv *t) {
	if(l > sr || r < sl) return;
	if(l >= sl && r <= sr) {
		v.push_back(t);
		return;
	}
	chy(l, (l + r) / 2, t->l);
	chy((l + r) / 2 + 1, r, t->r);
}

int mxg, am, dl, dr, dm;

bool qvw(int l, int r, int k) {
	v.clear();
	sl = l, sr = r;
	chy(1, n, rt);
	mxg = 0, am = 0;
	for(int i = 0; i < v.size(); ++i) {
		mxg = max(mxg, v[i]->sp);
		if(i && v[i]->v[0] < am) {
			dl = 0, dr = v[i]->v.size() - 1;
			while(dl < dr) {
				dm = (dl + dr + 1) / 2;
				if(v[i]->v[dm] < am) {
					dl = dm;
				} else {
					dr = dm - 1;
				}
			}
			mxg = max(mxg, am + v[i]->v[dl]);
		}
		am = max(am, v[i]->v[v[i]->v.size() - 1]);
	}
	return (k >= mxg);
}

void bod(int l, int r, vov *&t) {
	t = new vov();
	if(l == r) {
		t->s = {a[l], a[l]};
		return;
	}
	bod(l, (l + r) / 2, t->l);
	bod((l + r) / 2 + 1, r, t->r);
	t->P();
}

pair<int, int> sgs(int l, int r, vov *t) {
	if(l > sr || r < sl) return make_pair(-2, 0);
	if(l >= sl && r <= sr) return t->s;
	return G(sgs(l, (l + r) / 2, t->l), sgs((l + r) / 2 + 1, r, t->r));
}

bool dst(int l, int r) {
	sl = l, sr = r;
	pair<int, int> p = sgs(1, n, rtt);
	if(p.first != -1) return 1;
	return 0;
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m;
	for(int i = 1; i <= n; ++i) {
		cin >> a[i];
	}
	bool boo = 0;
	#ifdef WEEE
	boo = 1;
	#endif
	if(n > 200000 || boo) {
		bod(1, n, rtt);
		int l, r, k;
		for(int mi = 1; mi <= m; ++mi) {
			cin >> l >> r >> k;
			cout << dst(l, r) << "\n";
			#ifdef WEEE
			cout << flush;
			#endif
		}
		cout << flush;
	} else {
		bid(1, n, rt);
		int l, r, k;
		for(int mi = 1; mi <= m; ++mi) {
			cin >> l >> r >> k;
			cout << qvw(l, r, k) << "\n";
		}
		cout << flush;
	}
	return 0;
}

Compilation message (stderr)

sortbooks.cpp: In member function 'void vwv::P()':
sortbooks.cpp:11:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 |   for(int i = 0; i < r->v.size(); ++i) {
      |                  ~~^~~~~~~~~~~~~
sortbooks.cpp:18:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |   while(ld < l->v.size() || rd < r->v.size()) {
      |         ~~~^~~~~~~~~~~~~
sortbooks.cpp:18:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |   while(ld < l->v.size() || rd < r->v.size()) {
      |                             ~~~^~~~~~~~~~~~~
sortbooks.cpp:19:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |    if(ld == l->v.size()) {
      |       ~~~^~~~~~~~~~~~~~
sortbooks.cpp:22:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |    } else if(rd == r->v.size()) {
      |              ~~~^~~~~~~~~~~~~~
sortbooks.cpp: In function 'bool qvw(int, int, int)':
sortbooks.cpp:98:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<vwv*>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   98 |  for(int i = 0; i < v.size(); ++i) {
      |                 ~~^~~~~~~~~~
#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...