Submission #793365

#TimeUsernameProblemLanguageResultExecution timeMemory
793365ToniBBoat (APIO16_boat)C++17
31 / 100
723 ms524288 KiB
#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MAXN = 505;
const int OFF = 1 << 21;

int add(int a, int b){ return (a + b >= MOD) ? a + b - MOD : a + b; }

vector<int> dp[MAXN];

int n, a[MAXN], b[MAXN], tour[OFF];
vector<int> v;

int f(int x, int l, int r, int ql, int qr){
	if(ql <= l && r <= qr) return tour[x];
	if(ql > r || l > qr) return 0;
	int mid = (l + r) >> 1;
	return add(f(x * 2 + 1, l, mid, ql, qr), f(x * 2 + 2, mid + 1, r, ql, qr));
}
void upd(int x, int l, int r, int i, int val){
	if(l > i || r < i) return ;
	if(l == r){
		tour[x] = val;
		return ;
	}
	int mid = (l + r) >> 1;
	upd(x * 2 + 1, l, mid, i, val);
	upd(x * 2 + 2, mid + 1, r, i, val);
	tour[x] = add(tour[x * 2 + 1], tour[x * 2 + 2]);
}
int main(){
	ios_base::sync_with_stdio(false); cin.tie(0);
	
	cin >> n;
	unordered_map<int, int> um;
	vector<int> cmp;
	for(int i = 0; i < n; ++i){
		cin >> a[i] >> b[i];
		for(int j = b[i]; j >= a[i]; --j){
			v.push_back(j);
			cmp.push_back(j);
		}
	}
	
	sort(cmp.begin(), cmp.end());
	cmp.erase(unique(cmp.begin(), cmp.end()), cmp.end());
	
	for(int i = 0; i < (int)cmp.size(); ++i) um[cmp[i]] = i;
	n = (int)v.size();
	
	for(int i = 0; i < n; ++i) v[i] = um[v[i]];

	for(int i = 0; i < n; ++i){
		int x = f(0, 0, n - 1, 0, v[i]);
		upd(0, 0, n - 1, v[i], add(x, 1));
	}
	
	cout << tour[0];
	
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...