#include <bits/stdc++.h>
using namespace std;
int i,j,k,n, L,P;
long long a,b,q,z;
vector<array<int,2>> h;
bool cc;
array<long long,32> qq;
array<vector<int>,500001> g;
vector<array<int,2>> r,rn;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
q=1e9;
q+=7;
cin >> n;
for(i=0;i<n;i++) {
cin >> L >> P;
h.push_back({L,P});
}
for(j=n-1;j>=0;j--) {
rn={};
L=h[j][0];
P=h[j][1];
for(auto x:r) {
if(x[0]<L || x[0]>P)
rn.push_back(x);
else {
cc=1;
for(auto y:g[j])
if(y==x[1]) {
cc=0;
break;
}
if(cc)
g[j].push_back(x[1]);
}
}
for(auto y:g[j]) {
rn.push_back({L,y});
rn.push_back({P,y});
}
rn.push_back({L,j});
rn.push_back({P,j});
r=rn;
//cout << r.size() << '\n';
//for(auto w:r)
// cout << w[0] << ' ' << w[1] << "AA\n";
}
a=0;
b=1;
for(i=0;i<n;i++) {
z=g[i].size()+1;
//cout << i << ' ' << z << '\n';
a=(a*z+b)%q;
b=(z*b)%q;
}
z=q-2;
for (i=0;i<=30;i++){
qq[i]=z%2;
z/=2;
}
z=1;
//cout << a << ' ' << b << '\n';
for (j=0;j<=30;j++){
if (qq[j]){
z*=b;
z%=q;
}
b=(b*b)%q;
}
a*=z;
a%=q;
cout << a << '\n';
}
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include <bits/stdc++.h> using namespace std; int i,j,k,n, L,P; long long a,b,q,z; vector<array<int,2>> h; bool cc; array<long long,32> qq; array<vector<int>,500001> g; vector<array<int,2>> r,rn; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); q=1e9; q+=7; cin >> n; for(i=0;i<n;i++) { cin >> L >> P; h.push_back({L,P}); } for(j=n-1;j>=0;j--) { rn={}; L=h[j][0]; P=h[j][1]; for(auto x:r) { if(x[0]<L || x[0]>P) rn.push_back(x); else { cc=1; for(auto y:g[j]) if(y==x[1]) { cc=0; break; } if(cc) g[j].push_back(x[1]); } } for(auto y:g[j]) { rn.push_back({L,y}); rn.push_back({P,y}); } rn.push_back({L,j}); rn.push_back({P,j}); r=rn; //cout << r.size() << '\n'; //for(auto w:r) // cout << w[0] << ' ' << w[1] << "AA\n"; } a=0; b=1; for(i=0;i<n;i++) { z=g[i].size()+1; //cout << i << ' ' << z << '\n'; a=(a*z+b)%q; b=(z*b)%q; } z=q-2; for (i=0;i<=30;i++){ qq[i]=z%2; z/=2; } z=1; //cout << a << ' ' << b << '\n'; for (j=0;j<=30;j++){ if (qq[j]){ z*=b; z%=q; } b=(b*b)%q; } a*=z; a%=q; cout << a << '\n'; } |
English