1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <bits/stdc++.h>

using namespace std;

int main(){
	ios_base::sync_with_stdio(0);
	long long n; 
	cin>>n;
	if(n>30) {cout<<2137; return 0;}
	set<long long> wyn;
	vector<pair<long long, long long>> miny;
	for(long long i = 0; i < n; i++){
		long long a, r; cin>>a>>r;	
		miny.push_back(make_pair(a, r));	
	}

	vector<long long> inp(miny.size());
	for(long long i = 0; i < miny.size(); i++){
		long long pocz = i;
		long long mask = 1<<i;
		long long l = miny[i].first-miny[i].second;
		long long r = miny[i].first+miny[i].second;
		while(pocz>0&&miny[pocz-1].first>=l){
			pocz--;	
			l = min(l, miny[pocz].first-miny[pocz].second);
			mask+=(1<<pocz);
		}	
		long long kon = i;
		while(kon<n-1&&miny[kon+1].first<=r){
			kon++;
			r = min(r, miny[kon].first+miny[kon].second);
			mask+=(1<<kon);
		}	

		inp[i] = mask;	
	}

	
	for(long long mask = 0; mask < (1<<n); mask++){
		long long cur = 0;
		for(long long bit = 0; bit < 30; bit++){
			if(mask&(1<<bit)){
				cur|=inp[bit];	
			}		
		}	
		wyn.insert(cur);			
	}
	cout<<wyn.size();
	return 0;
}