QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#121290 | #3275. 小明的树 | zhouhuanyi | 100 ✓ | 1346ms | 59716kb | C++11 | 2.8kb | 2023-07-07 21:00:45 | 2023-07-07 21:00:46 |
Judging History
answer
#include<iostream>
#include<cstdio>
#include<vector>
#define N 500000
using namespace std;
int read()
{
char c=0;
int sum=0;
while (c<'0'||c>'9') c=getchar();
while ('0'<=c&&c<='9') sum=sum*10+c-'0',c=getchar();
return sum;
}
int n,m,a[N+1],p[N+1],X[N+1],Y[N+1];
bool used[N+1];
vector<int>E[N+1];
struct reads
{
int num,cnt;
long long data;
};
reads operator + (reads a,reads b)
{
if (a.num>b.num) swap(a,b);
if (a.num==b.num) return (reads){a.num,a.cnt+b.cnt,a.data+b.data};
else return a;
}
struct seg
{
struct node
{
int l,r,lazy,lazy2;
reads minn;
};
node tree[(N<<2)+1];
void push_up(int k)
{
tree[k].minn=tree[k<<1].minn+tree[k<<1|1].minn;
return;
}
void spread(int k)
{
if (tree[k].lazy)
{
tree[k<<1].minn.num+=tree[k].lazy,tree[k<<1].lazy+=tree[k].lazy;
tree[k<<1|1].minn.num+=tree[k].lazy,tree[k<<1|1].lazy+=tree[k].lazy;
tree[k].lazy=0;
}
if (tree[k].lazy2)
{
tree[k<<1].minn.data+=1ll*tree[k<<1].minn.cnt*tree[k].lazy2,tree[k<<1].lazy2+=tree[k].lazy2;
tree[k<<1|1].minn.data+=1ll*tree[k<<1|1].minn.cnt*tree[k].lazy2,tree[k<<1|1].lazy2+=tree[k].lazy2;
tree[k].lazy2=0;
}
return;
}
void build(int k,int l,int r)
{
tree[k].l=l,tree[k].r=r;
if (l==r)
{
tree[k].minn=(reads){n-l,1,0};
return;
}
int mid=(l+r)>>1;
build(k<<1,l,mid),build(k<<1|1,mid+1,r),push_up(k);
return;
}
void add(int k,int l,int r,int d)
{
if (l>r) return;
if (tree[k].l==l&&tree[k].r==r)
{
tree[k].minn.num+=d,tree[k].lazy+=d;
return;
}
spread(k);
int mid=(tree[k].l+tree[k].r)>>1;
if (r<=mid) add(k<<1,l,r,d);
else if (l>=mid+1) add(k<<1|1,l,r,d);
else add(k<<1,l,mid,d),add(k<<1|1,mid+1,r,d);
push_up(k);
return;
}
void add2(int k,int l,int r,int d)
{
if (tree[k].l==l&&tree[k].r==r)
{
tree[k].minn.data+=1ll*tree[k].minn.cnt*d,tree[k].lazy2+=d;
return;
}
spread(k);
int mid=(tree[k].l+tree[k].r)>>1;
if (r<=mid) add2(k<<1,l,r,d);
else if (l>=mid+1) add2(k<<1|1,l,r,d);
else add2(k<<1,l,mid,d),add2(k<<1|1,mid+1,r,d);
push_up(k);
return;
}
};
seg T;
int main()
{
int x,y,x2,y2;
n=read(),m=read(),p[1]=n,T.build(1,1,n-1);
for (int i=1;i<=n-1;++i) X[i]=read(),Y[i]=read();
for (int i=1;i<=n-1;++i) a[i]=read(),p[a[i]]=i;
for (int i=1;i<=n-1;++i) T.add(1,1,min(p[X[i]],p[Y[i]])-1,-1),T.add2(1,min(p[X[i]],p[Y[i]]),max(p[X[i]],p[Y[i]])-1,1);
printf("%lld\n",T.tree[1].minn.data);
while (m--)
{
x=read(),y=read(),x2=read(),y2=read();
T.add(1,1,min(p[x],p[y])-1,1),T.add2(1,min(p[x],p[y]),max(p[x],p[y])-1,-1);
T.add(1,1,min(p[x2],p[y2])-1,-1),T.add2(1,min(p[x2],p[y2]),max(p[x2],p[y2])-1,1);
printf("%lld\n",T.tree[1].minn.data);
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 10
Accepted
Test #1:
score: 10
Accepted
time: 413ms
memory: 59656kb
input:
500000 0 2 1 3 2 4 2 5 4 6 1 7 1 8 4 9 3 10 9 11 3 12 8 13 5 14 7 15 10 16 10 17 13 18 14 19 18 20 14 21 13 22 3 23 2 24 2 25 10 26 19 27 13 28 16 29 7 30 11 31 13 32 28 33 30 34 10 35 26 36 5 37 34 38 20 39 7 40 35 41 30 42 11 43 40 44 10 45 5 46 23 47 15 48 23 49 16 50 5 51 13 52 23 53 47 54 3 55 ...
output:
237
result:
ok 1 number(s): "237"
Subtask #2:
score: 20
Accepted
Test #2:
score: 20
Accepted
time: 11ms
memory: 24588kb
input:
8000 8000 2 1 3 2 4 1 5 4 6 3 7 4 8 3 9 3 10 8 11 6 12 7 13 11 14 11 15 7 16 4 17 11 18 7 19 8 20 19 21 18 22 17 23 2 24 15 25 23 26 13 27 10 28 1 29 7 30 17 31 11 32 18 33 2 34 1 35 29 36 5 37 21 38 6 39 7 40 26 41 19 42 3 43 9 44 39 45 23 46 41 47 38 48 12 49 4 50 30 51 1 52 41 53 17 54 41 55 53 5...
output:
16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ...
result:
ok 8001 numbers
Test #3:
score: 0
Accepted
time: 10ms
memory: 26520kb
input:
8000 8000 2 1 3 2 4 3 5 1 6 1 7 2 8 6 9 7 10 5 11 8 12 1 13 3 14 9 15 7 16 11 17 15 18 17 19 16 20 8 21 9 22 16 23 8 24 17 25 23 26 11 27 22 28 16 29 11 30 14 31 27 32 23 33 24 34 7 35 26 36 10 37 35 38 7 39 21 40 7 41 11 42 32 43 11 44 17 45 9 46 4 47 5 48 24 49 25 50 15 51 32 52 41 53 28 54 34 55 ...
output:
12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 ...
result:
ok 8001 numbers
Subtask #3:
score: 70
Accepted
Dependency #1:
100%
Accepted
Dependency #2:
100%
Accepted
Test #4:
score: 70
Accepted
time: 1253ms
memory: 59648kb
input:
500000 500000 2 1 3 2 4 1 5 2 6 1 7 6 8 7 9 1 10 7 11 8 12 11 13 6 14 4 15 4 16 6 17 9 18 8 19 14 20 11 21 15 22 9 23 11 24 16 25 6 26 19 27 15 28 7 29 10 30 18 31 5 32 30 33 27 34 15 35 22 36 23 37 13 38 21 39 12 40 12 41 38 42 8 43 42 44 37 45 43 46 17 47 14 48 41 49 20 50 20 51 44 52 39 53 23 54 ...
output:
262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 ...
result:
ok 500001 numbers
Test #5:
score: 0
Accepted
time: 1292ms
memory: 57320kb
input:
500000 500000 2 1 3 1 4 2 5 3 6 2 7 3 8 1 9 3 10 2 11 8 12 6 13 8 14 7 15 12 16 8 17 11 18 10 19 12 20 12 21 7 22 6 23 16 24 1 25 21 26 13 27 8 28 19 29 3 30 26 31 27 32 21 33 21 34 23 35 16 36 28 37 31 38 3 39 17 40 9 41 8 42 37 43 15 44 40 45 8 46 44 47 31 48 46 49 27 50 17 51 9 52 13 53 29 54 6 5...
output:
415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 415 ...
result:
ok 500001 numbers
Test #6:
score: 0
Accepted
time: 1270ms
memory: 57440kb
input:
500000 500000 2 1 3 2 4 1 5 4 6 3 7 1 8 5 9 6 10 7 11 5 12 5 13 12 14 2 15 6 16 15 17 9 18 17 19 17 20 5 21 9 22 19 23 5 24 15 25 11 26 4 27 11 28 19 29 28 30 5 31 30 32 21 33 10 34 8 35 3 36 14 37 10 38 26 39 12 40 1 41 27 42 34 43 20 44 14 45 33 46 3 47 19 48 45 49 35 50 32 51 1 52 42 53 9 54 7 55...
output:
57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 ...
result:
ok 500001 numbers
Test #7:
score: 0
Accepted
time: 1346ms
memory: 57480kb
input:
500000 500000 2 1 3 2 4 3 5 1 6 5 7 6 8 3 9 6 10 8 11 2 12 4 13 4 14 9 15 10 16 5 17 10 18 11 19 8 20 18 21 18 22 5 23 4 24 7 25 10 26 21 27 25 28 8 29 2 30 20 31 28 32 16 33 32 34 20 35 34 36 3 37 9 38 25 39 21 40 35 41 13 42 20 43 3 44 34 45 2 46 17 47 8 48 12 49 17 50 17 51 49 52 15 53 48 54 27 5...
output:
198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 ...
result:
ok 500001 numbers
Test #8:
score: 0
Accepted
time: 1229ms
memory: 59716kb
input:
500000 500000 2 1 3 2 4 2 5 2 6 3 7 2 8 2 9 4 10 1 11 2 12 10 13 6 14 8 15 5 16 13 17 7 18 1 19 16 20 7 21 9 22 15 23 20 24 6 25 2 26 10 27 6 28 2 29 27 30 6 31 24 32 2 33 4 34 5 35 4 36 31 37 5 38 5 39 17 40 19 41 30 42 40 43 2 44 14 45 25 46 37 47 6 48 46 49 19 50 33 51 11 52 1 53 27 54 7 55 47 56...
output:
290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 290 ...
result:
ok 500001 numbers
Test #9:
score: 0
Accepted
time: 1339ms
memory: 59528kb
input:
500000 500000 2 1 3 1 4 2 5 1 6 5 7 5 8 1 9 8 10 5 11 8 12 4 13 9 14 11 15 10 16 11 17 7 18 17 19 12 20 17 21 9 22 9 23 8 24 21 25 17 26 13 27 5 28 10 29 18 30 4 31 19 32 6 33 18 34 10 35 12 36 19 37 13 38 5 39 10 40 33 41 16 42 18 43 20 44 26 45 19 46 1 47 15 48 17 49 48 50 43 51 40 52 29 53 45 54 ...
output:
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 ...
result:
ok 500001 numbers
Test #10:
score: 0
Accepted
time: 1267ms
memory: 57324kb
input:
500000 500000 2 1 3 2 4 2 5 4 6 2 7 1 8 1 9 5 10 9 11 3 12 3 13 1 14 9 15 6 16 8 17 3 18 9 19 5 20 5 21 5 22 15 23 15 24 7 25 7 26 9 27 26 28 9 29 1 30 28 31 2 32 20 33 28 34 26 35 16 36 7 37 29 38 33 39 13 40 34 41 35 42 27 43 24 44 10 45 12 46 19 47 11 48 38 49 12 50 18 51 19 52 23 53 6 54 33 55 1...
output:
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
result:
ok 500001 numbers