QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#310467#8133. When Anton Saw This Task He Reacted With 😩Kevin5307AC ✓843ms56424kbC++233.7kb2024-01-21 14:33:452024-01-21 14:33:46

Judging History

你现在查看的是最新测评结果

  • [2024-01-21 14:33:46]
  • 评测
  • 测评结果:AC
  • 用时:843ms
  • 内存:56424kb
  • [2024-01-21 14:33:45]
  • 提交

answer

//Author: Kevin
#include<bits/stdc++.h>
//#pragma GCC optimize("O2")
using namespace std;
#define ll long long
#define ull unsigned ll
#define pb emplace_back
#define mp make_pair
#define ALL(x) (x).begin(),(x).end()
#define rALL(x) (x).rbegin(),(x).rend()
#define srt(x) sort(ALL(x))
#define rev(x) reverse(ALL(x))
#define rsrt(x) sort(rALL(x))
#define sz(x) (int)(x.size())
#define inf 0x3f3f3f3f
#define pii pair<int,int>
#define lb(v,x) (int)(lower_bound(ALL(v),x)-v.begin())
#define ub(v,x) (int)(upper_bound(ALL(v),x)-v.begin())
#define uni(v) v.resize(unique(ALL(v))-v.begin())
#define longer __int128_t
void die(string S){puts(S.c_str());exit(0);}
const ll mod=998244353;
int ls[200200],rs[200200];
array<ll,3> val[200200];
array<ll,3> cross(array<ll,3> A,array<ll,3> B)
{
	return {(A[1]*B[2]-A[2]*B[1])%mod,(A[2]*B[0]-A[0]*B[2])%mod,(A[0]*B[1]-A[1]*B[0])%mod};
}
int siz[200200],son[200200],depth[200200],tp[200200],fa[200200],dfn[200200],down[200200],tot;
void dfs1(int u)
{
	siz[u]=1;
	if(ls[u])
	{
		depth[ls[u]]=depth[rs[u]]=depth[u]+1;
		fa[ls[u]]=fa[rs[u]]=u;
		dfs1(ls[u]);
		dfs1(rs[u]);
		siz[u]+=siz[ls[u]]+siz[rs[u]];
		if(siz[ls[u]]>siz[rs[u]])
			son[u]=ls[u];
		else
			son[u]=rs[u];
		val[u]=cross(val[ls[u]],val[rs[u]]);
	}
}
void dfs2(int u)
{
	dfn[u]=++tot;
	if(!tp[u])
		tp[u]=u;
	down[tp[u]]=u;
	if(son[u])
	{
		tp[son[u]]=tp[u];
		dfs2(son[u]);
		dfs2(ls[u]+rs[u]-son[u]);
	}
}
using matrix=array<array<ll,3>,3>;
matrix mul(matrix a,matrix b)
{
	matrix ans;
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			ans[i][j]=0;
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			for(int k=0;k<3;k++)
				ans[i][k]+=a[i][j]*b[j][k];
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			ans[i][j]%=mod;
	return ans;
}
matrix lget(array<ll,3> val)
{
	return
	{
		array<ll,3>{0,val[2],-val[1]},
		array<ll,3>{-val[2],0,val[0]},
		array<ll,3>{val[1],-val[0],0}
	};
}
matrix rget(array<ll,3> val)
{
	return
	{
		array<ll,3>{0,-val[2],val[1]},
		array<ll,3>{val[2],0,-val[0]},
		array<ll,3>{-val[1],val[0],0}
	};
}
matrix seg[200200<<2];
void update(int x,int l,int r,int p,matrix m)
{
	if(l==r)
	{
		seg[x]=m;
		return ;
	}
	int mid=(l+r)/2;
	if(p<=mid)
		update(x<<1,l,mid,p,m);
	else
		update((x<<1)|1,mid+1,r,p,m);
	seg[x]=mul(seg[(x<<1)|1],seg[x<<1]);
}
matrix query(int x,int l,int r,int ql,int qr)
{
	if(ql>qr) return {array<ll,3>{1,0,0},array<ll,3>{0,1,0},array<ll,3>{0,0,1}};
	if(l==ql&&r==qr)
		return seg[x];
	int mid=(l+r)/2;
	if(qr<=mid)
		return query(x<<1,l,mid,ql,qr);
	if(ql>mid)
		return query((x<<1)|1,mid+1,r,ql,qr);
	return mul(query((x<<1)|1,mid+1,r,mid+1,qr),query(x<<1,l,mid,ql,mid));
}
int n,q;
void refresh(int u)
{
	int f=fa[u];
	if(!f) return ;
	update(1,1,n,dfn[f],(u==ls[f])?lget(val[u]):rget(val[u]));
}
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>q;
	for(int i=1;i<=n;i++)
	{
		char ch;
		cin>>ch;
		if(ch=='x')
			cin>>ls[i]>>rs[i];
		else
			cin>>val[i][0]>>val[i][1]>>val[i][2];
	}
	dfs1(1);
	dfs2(1);
	for(int i=n;i>=1;i--)
		if(tp[i]==i)
			refresh(i);
	while(q--)
	{
		int u;
		array<ll,3> v;
		cin>>u>>v[0]>>v[1]>>v[2];
		val[u]=v;
		while(u)
		{
			int x=tp[u];
			u=down[x];
			matrix mat=query(1,1,n,dfn[x],dfn[u]-1);
			val[x]=
			{
				(val[u][0]*mat[0][0]+val[u][1]*mat[1][0]+val[u][2]*mat[2][0])%mod,
				(val[u][0]*mat[0][1]+val[u][1]*mat[1][1]+val[u][2]*mat[2][1])%mod,
				(val[u][0]*mat[0][2]+val[u][1]*mat[1][2]+val[u][2]*mat[2][2])%mod
			};
			refresh(x);
			u=fa[x];
		}
		cout<<val[1][0]<<" "<<val[1][1]<<" "<<val[1][2]<<'\n';
	}
	return 0;
}
/*
5 3
x 2 3
v 1 0 1
x 4 5
v 0 2 1
v 1 1 1
4 1 2 3
5 0 1 1
4 0 2 2
*/

这程序好像有点Bug,我给组数据试试?

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 9836kb

input:

5 3
x 2 3
v 1 0 1
x 4 5
v 0 2 1
v 1 1 1
4 1 2 3
5 0 1 1
4 0 2 2

output:

-2 0 2
1 -2 -1
0 0 0

result:

ok 9 numbers

Test #2:

score: 0
Accepted
time: 843ms
memory: 53552kb

input:

199999 100000
x 137025 65661
v 572518668 158967010 74946561
x 129836 192657
x 141948 187810
v 574918069 328924434 141474729
x 143312 111002
x 52772 148497
v 922857701 690080961 651915759
v 656198340 28002884 129579416
v 639893144 265359784 646791226
v 796871409 411409966 598676495
v 882562617 224394...

output:

393120558 -224477738 387297348
-238284787 981774500 128012497
294611811 -18232745 533642029
-593864779 -252947501 53493560
-593678852 828869760 78021156
592494858 647751304 -116816620
-808225886 -483001218 -480063798
-370063853 -488259799 -740814218
13737245 -646156562 917410487
932051309 -631653126...

result:

ok 300000 numbers

Test #3:

score: 0
Accepted
time: 741ms
memory: 54296kb

input:

199999 100000
x 154525 80092
v 450407262 725458410 590777520
x 24720 135901
v 719242117 114943104 186796011
v 382530926 89156744 943939337
x 183376 26042
x 109984 157873
x 151637 150600
x 4115 27454
x 163135 92648
x 16764 33212
v 849210403 945083972 689295397
v 471196117 68587428 225597765
x 24643 5...

output:

677067461 996514296 449166851
-187841261 258196842 853459733
410756156 -744895835 912664471
-671109463 519245783 -75715594
317367558 -461355816 506214109
-513490823 -119198571 772404948
422920052 -846159695 517340457
-997036451 348787162 -677423276
776293878 699474926 711114530
871858473 -529746765 ...

result:

ok 300000 numbers

Test #4:

score: 0
Accepted
time: 610ms
memory: 53280kb

input:

199999 100000
x 72889 193806
x 35339 33069
v 314802407 406980523 492377265
x 108307 60027
x 144922 140917
v 328481079 117663280 644171354
v 482028404 951751561 166221217
v 936461869 436114879 421819757
x 152919 99965
x 61168 150607
v 56403640 743462679 134896557
v 24809217 462947115 966139991
v 7828...

output:

-974534477 -617795986 -369084686
-237565933 -458875163 611778104
-883317666 -344551438 -58366939
674199470 -693498618 -454120550
-44444241 186017361 49200537
-670961571 871001677 293980713
-409461196 -496113704 -807680056
-895563447 993889016 -34765598
-488231872 -892827456 -716473378
-187161547 -63...

result:

ok 300000 numbers

Test #5:

score: 0
Accepted
time: 536ms
memory: 53836kb

input:

199999 100000
x 134204 79203
v 152855933 152545887 271660214
v 393332175 182708769 115884220
v 731792305 965028257 676889584
x 89631 14495
x 142016 85686
v 600051847 172947969 906920949
v 846126215 214556203 657929902
x 125721 133526
x 93179 35713
v 330716449 450417250 611411649
v 114397688 58644961...

output:

-858646737 -622769376 14619793
-108915893 -918516919 363703631
-600893251 877961602 -569198163
588368345 819425899 502148739
-477665442 186408072 484373545
997888597 816534316 338411279
-664078084 -710032769 -389991713
-488963508 362972392 286415695
-634847393 878881251 -994585898
-286973481 9481653...

result:

ok 300000 numbers

Test #6:

score: 0
Accepted
time: 463ms
memory: 53340kb

input:

199999 100000
x 29842 60343
x 22382 27649
v 148997533 411153785 529195552
v 831453378 856711025 439562917
x 183061 152107
v 208562249 845550020 248974502
x 8708 152913
v 901332053 480035531 424365358
v 120556946 620074725 884675784
v 493886564 455460926 851190410
x 63346 64739
x 35246 36255
v 762936...

output:

-761447031 -808025939 70559261
661765898 266356472 -516614332
-587276683 -384515050 804008156
92638320 37926778 -915320148
357869883 232766711 579608532
-306542271 -873375751 -810877141
237610689 -389754505 581104410
848616732 -90371214 859807891
614624615 -543569509 -324614686
485784731 743926138 1...

result:

ok 300000 numbers

Test #7:

score: 0
Accepted
time: 465ms
memory: 53556kb

input:

199999 100000
x 179471 175117
x 189060 178495
x 20142 58065
x 22916 150184
v 704047412 186112247 660817663
v 761554808 199099716 794321264
v 362925435 508140595 251556541
v 65674025 717152823 157775106
v 325965317 977108704 50644678
v 566946741 833186394 771714200
v 996708965 76780827 625429369
v 85...

output:

-632986028 -892414579 -385846523
-266735298 576900445 663777200
-444725676 -582790078 7683807
468131249 577225931 -484650068
215590236 -137098079 -185423961
669985796 -768757519 -433552590
-69012487 520228049 774609748
-968294064 569366391 721072115
644573107 -484529715 554458153
728007201 423847330...

result:

ok 300000 numbers

Test #8:

score: 0
Accepted
time: 466ms
memory: 53856kb

input:

199999 100000
x 73506 171332
x 135330 187765
v 308206068 679940956 278078069
v 442448744 196158033 738117032
x 194709 115786
v 208526122 936976225 340056181
x 42663 43401
x 55484 199464
v 865443128 131903961 74265613
x 44659 44773
x 32199 18455
v 986118756 284329619 244212114
v 793747964 649179736 4...

output:

429717039 868308596 175018519
-31998235 -465792513 -225112347
-541158255 631788280 989689243
550574851 6706768 -581628454
285141084 -492917864 -81725651
457465389 653530244 -46638582
614211832 767828057 44273794
-300047713 -503306580 99337798
-279741119 -576166316 151379051
-977724006 -291100520 781...

result:

ok 300000 numbers

Test #9:

score: 0
Accepted
time: 482ms
memory: 54500kb

input:

199999 100000
x 109220 170287
v 563361501 367416904 98790213
x 31431 96958
x 99594 159052
x 95382 129615
v 61965807 547448247 405891792
v 443530416 578856323 588763197
v 761021716 795533831 212530056
v 370964907 391812631 255457982
x 49713 153066
x 141543 111694
v 144135957 614962153 284136518
x 416...

output:

-564950391 -661330106 -250875550
-6126833 -989063889 159616244
483825959 -501508520 964507719
912495370 737285784 595438897
-531120857 44306423 -436174061
903488238 -955272710 61415659
-728391208 -661502862 -433105475
-71245255 134871683 277614816
-353517322 -521919528 69621281
-13375740 -885653793 ...

result:

ok 300000 numbers

Test #10:

score: 0
Accepted
time: 0ms
memory: 9760kb

input:

3 1
x 2 3
v 998244352 998244352 998244352
v 0 0 0
3 1 2 0

output:

-998244351 998244352 998244352

result:

ok 3 number(s): "2 998244352 998244352"

Test #11:

score: 0
Accepted
time: 478ms
memory: 54496kb

input:

199999 100000
x 199465 1690
x 70268 106693
v 194793703 729830314 457557419
x 64673 6910
v 755452906 141328541 558160677
v 725017524 158685295 201414156
x 161801 27226
x 181414 47025
v 387724146 819109666 514628998
v 252532326 97757436 828777580
v 200868967 692540096 706977766
v 300419109 2053530 824...

output:

-371033836 640945891 400484640
-692602867 893058825 99893167
735729088 805595533 -715206562
377070714 -640281451 -661458804
835938680 -363549622 -975855419
493696932 -385691560 -481299119
963890355 517530875 48223226
215318080 -255660608 -618453331
-863169608 -27793541 921824280
86572382 -516548109 ...

result:

ok 300000 numbers

Test #12:

score: 0
Accepted
time: 427ms
memory: 56424kb

input:

199999 100000
x 37758 141919
v 148792593 369372129 595139892
x 59335 149367
v 452667329 904801829 628919068
v 160106559 532238331 179544300
v 850489754 705167899 265598880
x 120963 167491
x 92157 46815
v 444945978 987276260 843838004
x 189040 28027
v 889755401 760730228 3237333
x 168907 82672
v 2329...

output:

-101058855 177437016 -344597551
-949384144 883514812 -233545577
505088312 -412281905 -452153958
-83998326 -457300186 -315254628
-32409202 803706423 302298107
452996535 714783487 961852197
-115526544 425959754 -111853311
-794577049 454663502 -920138631
512196135 727218227 418204527
274934801 27097736...

result:

ok 300000 numbers

Extra Test:

score: 0
Extra Test Passed