답안 #380606

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
380606 2021-03-22T12:43:29 Z mariowong Examination (JOI19_examination) C++14
0 / 100
603 ms 16724 KB
#include <bits/stdc++.h>
using namespace std;

int n,m,pt;
long long seg[800005]; 
pair <long long,int> d[200005];
long long ct,now,ans[100005];
pair <pair<long long,long long>,pair<long long,long long>  > a[200005];
vector <pair<long long,long long>  > u;
vector <pair<pair<long long,long long>,int>  > q;
void build (int id,int x,int y){
	if (x == y)
	seg[id]=0;
	else
	{
		int mid=(x+y)/2;
		if (seg[id] != 0){
			build(id*2,x,mid);
			build(id*2+1,mid+1,y);
		}
		seg[id]=0;
	}
}
void update(int id,int x,int y,int pos){
	if (x == y)
	seg[id]++;
	else
	{
		int mid=(x+y)/2;
		if (pos <= mid) update(id*2,x,mid,pos);
		else update(id*2+1,mid+1,y,pos);
		seg[id]=seg[id*2]+seg[id*2+1];
	}
}
int query(int id,int x,int y,int l,int r){
	if (l <= x && y <= r)
	return seg[id];
	if (x > r || y < l)
	return 0;
	int mid=(x+y)/2;
	return query(id*2,x,mid,l,r)+query(id*2+1,mid+1,y,l,r);
}
void solve(int x,int y){
	if (x == y);
	else
	{
		int mid=(x+y)/2;
		u.clear(); q.clear();
		build(1,0,ct);
		for (int i=x;i<=mid;i++){
			if (a[i].second.second == 0)
			u.push_back(make_pair(a[i].first.second,a[i].second.first));
		}
		for (int i=mid+1;i<=y;i++){
			if (a[i].second.second != 0)
			q.push_back(make_pair(make_pair(a[i].first.second,a[i].second.first),a[i].second.second));
		}
		sort(u.begin(),u.end()); sort(q.begin(),q.end()); 
		reverse(u.begin(),u.end()); reverse(q.begin(),q.end()); 
		pt=0;
		for (int i=0;i<q.size();i++){
			while (pt < (int)u.size() && u[pt].first >= q[i].first.first){
				update(1,0,ct,u[pt].second);
				pt++;
			} 
			ans[q[i].second]+=query(1,0,ct,q[i].first.second,ct);
		}
		solve(x,mid);
		solve(mid+1,y);
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin >> n >> m;
	for (int i=1;i<=n;i++){
		cin >> a[i].first.first >> a[i].first.second;
		a[i].second.first=a[i].first.first+a[i].first.second;
		d[i]=make_pair(a[i].second.first,i);
	}
	for (int i=n+1;i<=n+m;i++){
		cin >> a[i].first.first >> a[i].first.second >> a[i].second.first; 
		a[i].second.second=i-n;
		d[i]=make_pair(a[i].second.first,i);
	}
	sort(d+1,d+1+n+m); now=1; ct=1;
	for (int i=1;i<=n+m;i++){
		if (d[i].first != d[i-1].first) 
		ct++;
		a[d[i].second].second.first=ct;
	}
	sort(a+1,a+1+n+m); reverse(a+1,a+1+n+m); 
	solve(1,n+m);
	for (int i=1;i<=m;i++){
		cout << ans[i] << "\n";
	}
	return 0;
}	

Compilation message

examination.cpp: In function 'void solve(int, int)':
examination.cpp:61:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<std::pair<long long int, long long int>, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   61 |   for (int i=0;i<q.size();i++){
      |                ~^~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 12 ms 876 KB Output is correct
8 Correct 14 ms 876 KB Output is correct
9 Correct 12 ms 876 KB Output is correct
10 Correct 11 ms 876 KB Output is correct
11 Correct 11 ms 876 KB Output is correct
12 Incorrect 6 ms 748 KB Output isn't correct
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 597 ms 15972 KB Output is correct
2 Correct 603 ms 16724 KB Output is correct
3 Correct 600 ms 16544 KB Output is correct
4 Correct 478 ms 15588 KB Output is correct
5 Correct 500 ms 15716 KB Output is correct
6 Incorrect 205 ms 14564 KB Output isn't correct
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 597 ms 15972 KB Output is correct
2 Correct 603 ms 16724 KB Output is correct
3 Correct 600 ms 16544 KB Output is correct
4 Correct 478 ms 15588 KB Output is correct
5 Correct 500 ms 15716 KB Output is correct
6 Incorrect 205 ms 14564 KB Output isn't correct
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 12 ms 876 KB Output is correct
8 Correct 14 ms 876 KB Output is correct
9 Correct 12 ms 876 KB Output is correct
10 Correct 11 ms 876 KB Output is correct
11 Correct 11 ms 876 KB Output is correct
12 Incorrect 6 ms 748 KB Output isn't correct
13 Halted 0 ms 0 KB -