Submission #361426

#TimeUsernameProblemLanguageResultExecution timeMemory
361426pure_memtrapezoid (balkan11_trapezoid)C++14
100 / 100
173 ms11500 KiB
#include <cstdio>
#include <algorithm>

#define X first
#define Y second
#define MP make_pair
#define ll long long

using namespace std;

const int N = 1e5 + 3, MX = 1e7, INF = 1e9, mod = 30013;

int n, a[4][N], p[N * 2], lens;
pair<int, int> todo[N];
struct node{
	int L, R, dp, sum;
}t[MX];
int cur_sz = 1;
void upd(int v, int tl, int tr, int pos, pair<int, int> val){
	if(tl == tr){
		t[v].dp = val.X, t[v].sum = val.Y;
		return;
	}
	int tm = (tl + tr) / 2;
	if(pos <= tm){
		if(t[v].L == 0)
			t[v].L = ++cur_sz;
		upd(t[v].L, tl, tm, pos, val);
	}
	else{
	    if(t[v].R == 0)
	    	t[v].R = ++cur_sz;
	    upd(t[v].R, tm + 1, tr, pos, val);
	}
	t[v].dp = max(t[t[v].L].dp, t[t[v].R].dp), t[v].sum = 0;
	if(t[t[v].L].dp == t[v].dp)
		t[v].sum += t[t[v].L].sum;
	if(t[t[v].R].dp == t[v].dp)
		t[v].sum += t[t[v].R].sum;
	t[v].sum %= mod;	
}
pair<int, int> get(int v, int tl, int tr, int l, int r){
	if(tl > r || l > tr || v == 0)
		return MP(0, 0);
	if(tl >= l && tr <= r)
		return MP(t[v].dp, t[v].sum);
	int tm = (tl + tr) / 2;
	pair<int, int> tmpL = get(t[v].L, tl, tm, l, r), tmpR = get(t[v].R, tm + 1, tr, l, r);
	if(tmpL.X < tmpR.X)
		return tmpR;
	if(tmpL.X == tmpR.X)
		tmpL.Y = (tmpL.Y + tmpR.Y) % mod;
	return tmpL;
}

int main () {
	scanf("%d", &n);
	for(int i = 1;i <= n;i++){
		for(int j = 0;j < 4;j++)
			scanf("%d", &a[j][i]);
		p[++lens] = i, p[++lens] = -i;
	}
	sort(p + 1, p + lens + 1, [](int x, int y){
		int x1 = (x > 0? a[1][x]: a[0][-x]), y1 = (y > 0? a[1][y]: a[0][-y]);
		return x1 < y1;
	});
	for(int it = 1;it <= lens;it++){
		int v = p[it];
		if(v < 0){
			v = -v;
			pair<int, int> tmp = get(1, 1, INF, 1, a[2][v]);
			tmp.X += 1;
			if(tmp.X == 1)
				tmp.Y = 1;
			todo[v] = tmp;
		}
		else{
		    upd(1, 1, INF, a[3][v], todo[v]);
		}
	}
	printf("%d %d", t[1].dp, t[1].sum);
}

Compilation message (stderr)

trapezoid.cpp: In function 'int main()':
trapezoid.cpp:57:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   57 |  scanf("%d", &n);
      |  ~~~~~^~~~~~~~~~
trapezoid.cpp:60:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   60 |    scanf("%d", &a[j][i]);
      |    ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...