답안 #411688

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
411688 2021-05-25T18:07:51 Z Jasiekstrz Pairs (IOI07_pairs) C++17
60 / 100
64 ms 5804 KB
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
const int N=1e5;
namespace d1
{
	int tab[N+10];
	long long solve()
	{
		int n,d,m;
		cin>>n>>d>>m;
		for(int i=1;i<=n;i++)
			cin>>tab[i];
		sort(tab+1,tab+n+1);
		long long ans=0;
		for(int i=1,j=1;i<=n;i++)
		{
			while(tab[i]-tab[j]>d)
				j++;
			ans+=i-j;
		}
		return ans;
	}
};
namespace d2
{
	const int P=27e4;
	struct Event
	{
		int x,y;
		int val;
		bool operator<(const Event &oth)
		{
			return x<oth.x;
		}
	};
	pair<int,int> tab[N+10];
	vector<Event> ev;
	int pot;
	int tree[2*P+10];
	void add(int x,int c)
	{
		for(x+=pot-1;x>0;x/=2)
			tree[x]+=c;
		return;
	}
	long long read(int l,int r)
	{
		l=max(1,l);r=min(pot,r);
		long long ans=0;
		for(l+=pot-1,r+=pot-1;l<=r;l/=2,r/=2)
		{
			if(l%2==1)
				ans+=tree[l++];
			if(r%2==0)
				ans+=tree[r--];
		}
		return ans;
	}
	long long solve()
	{
		int n,d,m;
		cin>>n>>d>>m;
		for(int i=1;i<=n;i++)
		{
			cin>>tab[i].fi>>tab[i].se;
			ev.push_back({tab[i].fi-tab[i].se,tab[i].fi+tab[i].se,1});
			ev.push_back({tab[i].fi-tab[i].se+d+1,tab[i].fi+tab[i].se,-1});
		}
		sort(ev.begin(),ev.end());
		for(pot=1;pot<2*m;pot++);
		long long ans=0;
		for(int i=-m,j=0;i<=m;i++)
		{
			size_t it;
			for(it=j;it<ev.size() && ev[it].x==i;it++)
			{
				if(ev[it].val==-1)
					add(ev[it].y,ev[it].val);
			}
			for(it=j;it<ev.size() && ev[it].x==i;it++)
			{
				if(ev[it].val==1)
				{
					ans+=read(ev[it].y-d,ev[it].y+d);
					add(ev[it].y,ev[it].val);
					//cerr<<ev[it].x<<" "<<ev[it].y<<" ["<<ans<<"]\n";
				}
			}
			j=it;
		}
		return ans;
	}
};
namespace d3
{
	long long solve()
	{
		return 0;
	}
};
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int board_type;
	cin>>board_type;
	if(board_type==1)
		cout<<d1::solve();
	else if(board_type==2)
		cout<<d2::solve();
	else
		cout<<d3::solve();
	cout<<"\n";
	return 0;
}

# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 716 KB Output is correct
2 Correct 15 ms 632 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 680 KB Output is correct
2 Correct 20 ms 588 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 720 KB Output is correct
2 Correct 22 ms 716 KB Output is correct
3 Correct 19 ms 716 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1484 KB Output is correct
2 Correct 2 ms 1484 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 39 ms 4012 KB Output is correct
2 Correct 33 ms 4544 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 44 ms 3996 KB Output is correct
2 Correct 46 ms 4800 KB Output is correct
3 Correct 44 ms 4776 KB Output is correct
4 Correct 46 ms 4664 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 64 ms 4612 KB Output is correct
2 Correct 64 ms 5804 KB Output is correct
3 Correct 51 ms 5740 KB Output is correct
4 Correct 53 ms 5784 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 332 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 332 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 332 KB Output isn't correct
2 Halted 0 ms 0 KB -