이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define fi first
#define se second
#define fin(s) freopen( s, "r", stdin );
#define fout(s) freopen( s, "w", stdout );
const long long N = 2000100;
const long long Q = N * 30;
const long long mod = 1e9 + 7;
const long long MAGIC = 30;
using namespace std;
int n;
int f[N];
bool t[2][4 * N];
void upd(int tp, int x, int l, int r, int g)
{
t[tp][x] = 1;
if(l == r){
return;
}
int m = (l + r) / 2;
if(g <= m){
upd(tp, x * 2, l, m, g);
}
else{
upd(tp, x * 2 + 1, m + 1, r, g);
}
}
bool get(int tp, int x, int l, int r, int tl, int tr)
{
if(tl > tr){
return 0;
}
if(l == tl && r == tr){
return t[tp][x];
}
int m = (l + r) / 2;
return get(tp, x * 2, l, m, tl, min(m, tr)) | get(tp, x * 2 + 1, m + 1, r, max(m + 1, tl), tr);
}
void solve()
{
cin >> n;
for(int i = 1; i <= n; i++){
int l, r;
cin >> l >> r;
f[l] = r;
}
long long ans = 1;
n += n;
for(int i = 1; i <= n; i++){
if(f[i] == 0){
continue;
}
int f1 = get(0, 1, 1, n, i, f[i]), f2 = get(1, 1, 1, n, i, f[i]);
if(f1 && f2){
cout << 0 << "\n";
return;
}
else if(!f1){
if(!f2){
ans = ans * 2;
}
upd(0, 1, 1, n, f[i]);
}
else{
upd(1, 1, 1, n, f[i]);
}
}
cout << ans << "\n";
}
bool mtest = false; int main()
{
//fin("input.txt");
//fout("output.txt");
//fin("island.in");
//fout("island.out");
ios_base::sync_with_stdio(0);
int TE = 1;
if(mtest)
cin >> TE;
while(TE--)
solve();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |