답안 #157191

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
157191 2019-10-10T02:56:21 Z puppies_and_rainbows Examination (JOI19_examination) C++14
100 / 100
2605 ms 441588 KB
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#define left dhusiad
#define right dusanan
using namespace std;

pair<int, int> a[1000005], cursort[1000005];
int it[400005], root[400005];
int it1[10000005], left[10000005], right[10000005];
vector<int> check[10000005];
int cntnode=0, ans, ans1;
int n;

int itgen(int l, int r)
{
	if(l>r) return 0;
	cntnode++;
	int id=cntnode;
	for(int i=l; i<=r; i++)
	{
		check[id].push_back(cursort[i].second);
	}
	it1[id]=cursort[r].first;
	sort(check[id].begin(), check[id].end());
	int mid=(l+r)/2;
	if(l==r) return id;
	left[id]=itgen(l, mid);
	right[id]=itgen(mid+1, r);
	return id;
}

void build_tree(int id, int l, int r)
{
	// cout<<"DEBUG "<<l<<" "<<r<<endl;
	for(int i=l; i<=r; i++)
	{
		cursort[i]={a[i].second, a[i].first+a[i].second};
		// cout<<cursort[i].first<<" "<<cursort[i].second<<endl;
	}
	// cout<<endl;
	sort(cursort+l, cursort+r+1);
	// for(int i=l; i<=r; i++)
	// {
	// 	cout<<cursort[i].first<<" "<<cursort[i].second<<endl;
	// }
	// cout<<endl;
	root[id]=itgen(l, r);
	if(l==r) it[id]=a[l].first;
	else
	{
		int mid=(l+r)/2;
		build_tree(id*2, l, mid);
		build_tree(id*2+1, mid+1, r);
		it[id]=max(it[id*2], it[id*2+1]);
	}
}

void solvehave(int ok, int y, int z, int l, int r)
{
	// cout<<l<<" "<<r<<" "<<ans1<<endl;
	int id=root[ok];
	while(l<r)
	{
		int mid=(l+r)/2;
		if(it1[left[id]]>=y)
		{
			ans1+=(int)(check[right[id]].end()-lower_bound(check[right[id]].begin(), check[right[id]].end(), z));
			id=left[id];
			r=mid;
		}
		else
		{
			id=right[id];
			l=mid+1;
		}
	}
	if(it1[id]>=y&&check[id][0]>=z) ans1++;
	// cout<<ans1<<endl;
}

void solvefail(int id, int z)
{
	return;
	ans+=check[root[id]].end()-lower_bound(check[root[id]].begin(), check[root[id]].end(), z);
}

bool checkk(int id, int x, int y, int z)
{
	if(a[id].first>=x&&a[id].second>=y&&a[id].first+a[id].second>=z) return true;
	return false;
}

int solve(int x, int y, int z)
{
	ans=0, ans1=0;
	int id=1, l=1, r=n;
	while(l<r)
	{
		int mid=(l+r)/2;
		if(it[id*2]>=x)
		{
			solvehave(id*2+1, y, z, mid+1, r);
			id*=2;
			r=mid;
		}
		else
		{
			solvefail(id*2, z);
			id=id*2+1;
			l=mid+1;
		}
	}
	if(checkk(l, x, y, z))
	{
		ans++;
	}
	return ans+ans1;
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int q;
	cin>>n>>q;
	for(int i=1; i<=n; i++)
	{
		cin>>a[i].first>>a[i].second;
	}
	sort(a+1, a+n+1);
	build_tree(1, 1, n);
	// cout<<1<<endl;
	// return 0;
	int x, y, z;
	for(int i=1; i<=q; i++)
	{
		cin>>x>>y>>z;
		cout<<solve(x, y, z)<<endl;
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 224 ms 235264 KB Output is correct
2 Correct 226 ms 235256 KB Output is correct
3 Correct 253 ms 235268 KB Output is correct
4 Correct 234 ms 235152 KB Output is correct
5 Correct 228 ms 235384 KB Output is correct
6 Correct 223 ms 235256 KB Output is correct
7 Correct 257 ms 239268 KB Output is correct
8 Correct 258 ms 239176 KB Output is correct
9 Correct 256 ms 239068 KB Output is correct
10 Correct 283 ms 239156 KB Output is correct
11 Correct 268 ms 239096 KB Output is correct
12 Correct 263 ms 239100 KB Output is correct
13 Correct 255 ms 239140 KB Output is correct
14 Correct 255 ms 239096 KB Output is correct
15 Correct 255 ms 239096 KB Output is correct
16 Correct 248 ms 239096 KB Output is correct
17 Correct 250 ms 239148 KB Output is correct
18 Correct 246 ms 239096 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2444 ms 436848 KB Output is correct
2 Correct 2406 ms 436728 KB Output is correct
3 Correct 2319 ms 436736 KB Output is correct
4 Correct 2005 ms 436760 KB Output is correct
5 Correct 1649 ms 436732 KB Output is correct
6 Correct 1473 ms 436920 KB Output is correct
7 Correct 2232 ms 436712 KB Output is correct
8 Correct 2111 ms 436724 KB Output is correct
9 Correct 1995 ms 436832 KB Output is correct
10 Correct 1423 ms 436520 KB Output is correct
11 Correct 1613 ms 436568 KB Output is correct
12 Correct 1305 ms 436256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2444 ms 436848 KB Output is correct
2 Correct 2406 ms 436728 KB Output is correct
3 Correct 2319 ms 436736 KB Output is correct
4 Correct 2005 ms 436760 KB Output is correct
5 Correct 1649 ms 436732 KB Output is correct
6 Correct 1473 ms 436920 KB Output is correct
7 Correct 2232 ms 436712 KB Output is correct
8 Correct 2111 ms 436724 KB Output is correct
9 Correct 1995 ms 436832 KB Output is correct
10 Correct 1423 ms 436520 KB Output is correct
11 Correct 1613 ms 436568 KB Output is correct
12 Correct 1305 ms 436256 KB Output is correct
13 Correct 2372 ms 436756 KB Output is correct
14 Correct 2364 ms 436668 KB Output is correct
15 Correct 2331 ms 436604 KB Output is correct
16 Correct 2098 ms 436724 KB Output is correct
17 Correct 1700 ms 436724 KB Output is correct
18 Correct 1505 ms 436648 KB Output is correct
19 Correct 2378 ms 436788 KB Output is correct
20 Correct 2392 ms 436700 KB Output is correct
21 Correct 2455 ms 436680 KB Output is correct
22 Correct 1456 ms 436492 KB Output is correct
23 Correct 1660 ms 436576 KB Output is correct
24 Correct 1422 ms 436376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 224 ms 235264 KB Output is correct
2 Correct 226 ms 235256 KB Output is correct
3 Correct 253 ms 235268 KB Output is correct
4 Correct 234 ms 235152 KB Output is correct
5 Correct 228 ms 235384 KB Output is correct
6 Correct 223 ms 235256 KB Output is correct
7 Correct 257 ms 239268 KB Output is correct
8 Correct 258 ms 239176 KB Output is correct
9 Correct 256 ms 239068 KB Output is correct
10 Correct 283 ms 239156 KB Output is correct
11 Correct 268 ms 239096 KB Output is correct
12 Correct 263 ms 239100 KB Output is correct
13 Correct 255 ms 239140 KB Output is correct
14 Correct 255 ms 239096 KB Output is correct
15 Correct 255 ms 239096 KB Output is correct
16 Correct 248 ms 239096 KB Output is correct
17 Correct 250 ms 239148 KB Output is correct
18 Correct 246 ms 239096 KB Output is correct
19 Correct 2444 ms 436848 KB Output is correct
20 Correct 2406 ms 436728 KB Output is correct
21 Correct 2319 ms 436736 KB Output is correct
22 Correct 2005 ms 436760 KB Output is correct
23 Correct 1649 ms 436732 KB Output is correct
24 Correct 1473 ms 436920 KB Output is correct
25 Correct 2232 ms 436712 KB Output is correct
26 Correct 2111 ms 436724 KB Output is correct
27 Correct 1995 ms 436832 KB Output is correct
28 Correct 1423 ms 436520 KB Output is correct
29 Correct 1613 ms 436568 KB Output is correct
30 Correct 1305 ms 436256 KB Output is correct
31 Correct 2372 ms 436756 KB Output is correct
32 Correct 2364 ms 436668 KB Output is correct
33 Correct 2331 ms 436604 KB Output is correct
34 Correct 2098 ms 436724 KB Output is correct
35 Correct 1700 ms 436724 KB Output is correct
36 Correct 1505 ms 436648 KB Output is correct
37 Correct 2378 ms 436788 KB Output is correct
38 Correct 2392 ms 436700 KB Output is correct
39 Correct 2455 ms 436680 KB Output is correct
40 Correct 1456 ms 436492 KB Output is correct
41 Correct 1660 ms 436576 KB Output is correct
42 Correct 1422 ms 436376 KB Output is correct
43 Correct 2453 ms 436628 KB Output is correct
44 Correct 2532 ms 441460 KB Output is correct
45 Correct 2605 ms 441316 KB Output is correct
46 Correct 2108 ms 440076 KB Output is correct
47 Correct 1660 ms 439940 KB Output is correct
48 Correct 1519 ms 437524 KB Output is correct
49 Correct 2310 ms 441484 KB Output is correct
50 Correct 2319 ms 441588 KB Output is correct
51 Correct 2208 ms 441408 KB Output is correct
52 Correct 1452 ms 439788 KB Output is correct
53 Correct 1569 ms 438996 KB Output is correct