#include<iostream>
#include<map>
#include<vector>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std ;
const int N = (1 << 19), NS = 5e3, NSS = (1 << 17) ;
bool flag, us[NS + 1][NS + 1] ;
int n, q, sm, c[N + 1] ;
vector<int> sg[2 * NSS + 1], sg_b[2 * NSS + 1] ;
vector<int> nul, ks[N + 1] ;
map<int, int> ch, null ;
void bfs(int city)
{
ch = null ;
bool abu = 1 ;
int l = city, r = city ;
for(int i : ks[city])
ch[i] = 1 ;
us[city][city] = 1 ;
while(abu)
{
abu ^= 1 ;
if(l > 1 && ch[c[l - 1]])
{
l-- ;
for(int i : ks[l])
ch[i] = 1 ;
us[city][l] = 1 ;
abu |= 1 ;
}
if(r < n && ch[c[r]])
{
abu |= 1 ;
r++ ;
for(int i : ks[r])
ch[i] = 1 ;
us[city][r] = 1 ;
}
}
}
vector<int> mrg(vector<int> a, vector<int> b)
{
if(!a.size() || !b.size())
{
if(a.size())
return a ;
else
return b ;
}
int uk1 = 0, uk2 = 0 ;
vector<int> c ;
while(uk1 < a.size() || uk2 < b.size())
{
int mn = 21 ;
if(uk1 < a.size())
mn = min(mn, a[uk1]) ;
if(uk2 < b.size())
mn = min(mn, b[uk2]) ;
if(!c.size() || c.back() != mn)
c.push_back(mn) ;
if(uk1 < a.size() && a[uk1] == mn)
uk1++ ;
else
uk2++ ;
}
return c ;
}
void build()
{
for(int i = 0 ; i < NSS ; i++)
{
if(i + 1 < n)
sg[i + NSS].push_back(c[i + 1]) ;
if(i + 1 <= n)
sg_b[i + NSS] = ks[i + 1] ;
}
for(int i = NSS - 1 ; i > 0 ; i--)
{
sg[i] = mrg(sg[i * 2], sg[i * 2 + 1]) ;
sg_b[i] = mrg(sg_b[i * 2], sg_b[i * 2 + 1]) ;
}
}
vector<int> get_all(int l, int r, int l1, int r1, int v)
{
l += NSS ;
r += NSS ;
vector<int> res ;
while(l <= r)
{
if(l % 2 == 1)
res = mrg(res, sg[l++]) ;
if(r % 2 == 0)
res = mrg(res, sg[r--]) ;
l >>= 1 ;
r >>= 1 ;
}
return res ;
}
vector<int> get_all_b(int l, int r, int l1, int r1, int v)
{
l += NSS ;
r += NSS ;
vector<int> res ;
while(l <= r)
{
if(l % 2 == 1)
res = mrg(res, sg_b[l++]) ;
if(r % 2 == 0)
res = mrg(res, sg_b[r--]) ;
l >>= 1 ;
r >>= 1 ;
}
return res ;
}
signed main()
{
ios_base::sync_with_stdio( 0 ) ;
cin.tie( 0 ) ;
cout.tie( 0 ) ;
cin >> n ;
for(int i = 1 ; i < n ; i++)
{
cin >> c[i] ;
if(c[i] > 20)flag = 1 ;
}
for(int i = 1 ; i <= n ; i++)
{
int b ;
cin >> b ;
sm += b ;
for(int j = 1 ; j <= b ; j++)
{
int a ;
cin >> a ;
if(a > 20)flag = 1 ;
ks[i].push_back(a) ;
}
}
cin >> q ;
if(n <= 5000 && sm <= 5000)
{
for(int i = 1 ; i <= n ; i++)
bfs(i) ;
for(int i = 1 ; i <= q ; i++)
{
int x, y ;
cin >> x >> y ;
if(us[x][y])
cout << "YES\n" ;
else
cout << "NO\n" ;
}
return 0 ;
}
if(n <= 1e5 && !flag)
{
build() ;
while(q--)
{
bool abu[21] = {} ;
bool fl = 1 ;
int x, y ;
cin >> x >> y ;
int lf = x, rg = x ;
for(int j : ks[x])
abu[j] = 1 ;
while(fl)
{
fl ^= 1 ;
vector<int> vl, vr ;
int l = 0, r = lf ;
while(l + 1 < r)
{
bool check = 0 ;
int mid = (l + r) >> 1 ;
vl = get_all(1, NSS, mid, lf - 1, 1) ;
for(int j : vl)
if(!abu[j])check = 1 ;
if(check)
l = mid ;
else
r = mid ;
}
if(r < lf)
{
vl = get_all_b(1, NSS, r, lf - 1, 1) ;
for(int j : vl)
abu[j] = 1 ;
lf = r ;
fl = 1 ;
}
l = rg - 1, r = n ;
while(l + 1 < r)
{
bool check = 0 ;
int mid = (l + r) >> 1 ;
vr = get_all(1, NSS, rg, mid, 1) ;
for(int j : vr)
if(!abu[j])check = 1 ;
if(check)
r = mid ;
else
l = mid ;
}
if(l >= rg)
{
vr = get_all_b(1, NSS, rg + 1, l + 1, 1) ;
for(int j : vr)
abu[j] = 1 ;
fl = 1 ;
rg = l + 1 ;
}
}
if(lf <= y && y <= rg)
cout << "YES\n" ;
else
cout << "NO\n" ;
}
return 0 ;
}
return 0 ;
}
Compilation message
long_mansion.cpp: In function 'std::vector<int> mrg(std::vector<int>, std::vector<int>)':
long_mansion.cpp:53:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
53 | while(uk1 < a.size() || uk2 < b.size())
| ~~~~^~~~~~~~~~
long_mansion.cpp:53:33: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
53 | while(uk1 < a.size() || uk2 < b.size())
| ~~~~^~~~~~~~~~
long_mansion.cpp:56:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
56 | if(uk1 < a.size())
| ~~~~^~~~~~~~~~
long_mansion.cpp:58:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
58 | if(uk2 < b.size())
| ~~~~^~~~~~~~~~
long_mansion.cpp:62:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
62 | if(uk1 < a.size() && a[uk1] == mn)
| ~~~~^~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
26 ms |
33044 KB |
Output is correct |
2 |
Correct |
116 ms |
38216 KB |
Output is correct |
3 |
Correct |
232 ms |
48412 KB |
Output is correct |
4 |
Correct |
35 ms |
33148 KB |
Output is correct |
5 |
Correct |
365 ms |
34724 KB |
Output is correct |
6 |
Correct |
152 ms |
33696 KB |
Output is correct |
7 |
Correct |
98 ms |
33472 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
26 ms |
33044 KB |
Output is correct |
2 |
Correct |
116 ms |
38216 KB |
Output is correct |
3 |
Correct |
232 ms |
48412 KB |
Output is correct |
4 |
Correct |
35 ms |
33148 KB |
Output is correct |
5 |
Correct |
365 ms |
34724 KB |
Output is correct |
6 |
Correct |
152 ms |
33696 KB |
Output is correct |
7 |
Correct |
98 ms |
33472 KB |
Output is correct |
8 |
Correct |
144 ms |
35016 KB |
Output is correct |
9 |
Correct |
101 ms |
34836 KB |
Output is correct |
10 |
Correct |
232 ms |
40124 KB |
Output is correct |
11 |
Correct |
391 ms |
50440 KB |
Output is correct |
12 |
Correct |
138 ms |
31388 KB |
Output is correct |
13 |
Correct |
101 ms |
34988 KB |
Output is correct |
14 |
Correct |
127 ms |
35024 KB |
Output is correct |
15 |
Correct |
274 ms |
35832 KB |
Output is correct |
16 |
Correct |
446 ms |
36996 KB |
Output is correct |
17 |
Correct |
96 ms |
35028 KB |
Output is correct |
18 |
Correct |
137 ms |
35132 KB |
Output is correct |
19 |
Correct |
149 ms |
35312 KB |
Output is correct |
20 |
Correct |
436 ms |
36600 KB |
Output is correct |
21 |
Correct |
431 ms |
37008 KB |
Output is correct |
22 |
Correct |
390 ms |
36436 KB |
Output is correct |
23 |
Correct |
211 ms |
35320 KB |
Output is correct |
24 |
Correct |
201 ms |
35216 KB |
Output is correct |
25 |
Correct |
157 ms |
35252 KB |
Output is correct |
26 |
Correct |
115 ms |
35012 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
3038 ms |
73808 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
26 ms |
33044 KB |
Output is correct |
2 |
Correct |
116 ms |
38216 KB |
Output is correct |
3 |
Correct |
232 ms |
48412 KB |
Output is correct |
4 |
Correct |
35 ms |
33148 KB |
Output is correct |
5 |
Correct |
365 ms |
34724 KB |
Output is correct |
6 |
Correct |
152 ms |
33696 KB |
Output is correct |
7 |
Correct |
98 ms |
33472 KB |
Output is correct |
8 |
Correct |
144 ms |
35016 KB |
Output is correct |
9 |
Correct |
101 ms |
34836 KB |
Output is correct |
10 |
Correct |
232 ms |
40124 KB |
Output is correct |
11 |
Correct |
391 ms |
50440 KB |
Output is correct |
12 |
Correct |
138 ms |
31388 KB |
Output is correct |
13 |
Correct |
101 ms |
34988 KB |
Output is correct |
14 |
Correct |
127 ms |
35024 KB |
Output is correct |
15 |
Correct |
274 ms |
35832 KB |
Output is correct |
16 |
Correct |
446 ms |
36996 KB |
Output is correct |
17 |
Correct |
96 ms |
35028 KB |
Output is correct |
18 |
Correct |
137 ms |
35132 KB |
Output is correct |
19 |
Correct |
149 ms |
35312 KB |
Output is correct |
20 |
Correct |
436 ms |
36600 KB |
Output is correct |
21 |
Correct |
431 ms |
37008 KB |
Output is correct |
22 |
Correct |
390 ms |
36436 KB |
Output is correct |
23 |
Correct |
211 ms |
35320 KB |
Output is correct |
24 |
Correct |
201 ms |
35216 KB |
Output is correct |
25 |
Correct |
157 ms |
35252 KB |
Output is correct |
26 |
Correct |
115 ms |
35012 KB |
Output is correct |
27 |
Execution timed out |
3038 ms |
73808 KB |
Time limit exceeded |
28 |
Halted |
0 ms |
0 KB |
- |