QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#291753#4817. Half PlaneRadewoosh#TL 10951ms347180kbC++237.6kb2023-12-27 04:40:462023-12-27 04:40:47

Judging History

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

  • [2023-12-27 04:40:47]
  • 评测
  • 测评结果:TL
  • 用时:10951ms
  • 内存:347180kb
  • [2023-12-27 04:40:46]
  • 提交

answer

//~ while (clock()<=69*CLOCKS_PER_SEC)
//~ #pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("O3")
//~ #pragma GCC target ("avx2")
//~ #pragma GCC optimize("Ofast")
//~ #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//~ #pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;
using namespace std;

template <typename T>
using ordered_set =
    tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

#define sim template < class c
#define ris return * this
#define dor > debug & operator <<
#define eni(x) sim > typename \
  enable_if<sizeof dud<c>(0) x 1, debug&>::type operator<<(c i) {
sim > struct rge { c b, e; };
sim > rge<c> range(c i, c j) { return rge<c>{i, j}; }
sim > auto dud(c* x) -> decltype(cerr << *x, 0);
sim > char dud(...);
struct debug {
#ifdef LOCAL
~debug() { cerr << endl; }
eni(!=) cerr << boolalpha << i; ris; }
eni(==) ris << range(begin(i), end(i)); }
sim, class b dor(pair < b, c > d) {
  ris << "(" << d.first << ", " << d.second << ")";
}
sim dor(rge<c> d) {
  *this << "[";
  for (auto it = d.b; it != d.e; ++it)
    *this << ", " + 2 * (it == d.b) << *it;
  ris << "]";
}
#else
sim dor(const c&) { ris; }
#endif
};
#define imie(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "

#define shandom_ruffle random_shuffle

using ll=long long;
using pii=pair<int,int>;
using pll=pair<ll,ll>;
using vi=vector<int>;
using vll=vector<ll>;
const int nax=1000*1007;
const ll mod=1000*1000*1000+7;
const int inf=1007*1007*1007;

int n, q;

struct vec
{
	ll w[3];
	vec()
	{
		for (int i=0; i<3; i++)
			w[i]=0;
	}
	void czyt()
	{
		for (int i=0; i<3; i++)
			scanf("%lld", &w[i]);
	}
	void reset()
	{
		for (int i=0; i<3; i++)
			w[i]=0;
	}
};

struct mac
{
	ll w[3][3];
	int pusta=0;
	mac()
	{
		for (int i=0; i<3; i++)
			for (int j=0; j<3; j++)
				w[i][j]=0;
	}
	void czyt()
	{
		for (int i=0; i<3; i++)
			for (int j=0; j<3; j++)
				scanf("%lld", &w[i][j]);
	}
	void reset()
	{
		if (pusta)
			return;
		for (int i=0; i<3; i++)
			for (int j=0; j<3; j++)
				w[i][j]=(i==j);
		pusta=1;
	}
};

ll pom[3][3];

void domnoz(const mac &a, mac &b)
{
	if (a.pusta)
		return;
	if (b.pusta)
	{
		for (int i=0; i<3; i++)
			for (int j=0; j<3; j++)
				b.w[i][j]=a.w[i][j];
		b.pusta=0;
		return;
	}
	for (int i=0; i<3; i++)
		for (int j=0; j<3; j++)
			pom[i][j]=0;
	for (int i=0; i<3; i++)
		for (int j=0; j<3; j++)
			for (int l=0; l<3; l++)
				pom[i][l]+=a.w[i][j]*b.w[j][l];
	for (int i=0; i<3; i++)
		for (int j=0; j<3; j++)
			b.w[i][j]=pom[i][j]%mod;
}

pii tab[nax];
vec vectab[nax];

int m;

pii px[nax];
pii py[nax];
mac narz[nax];
vec pod[nax];
vi dz[nax];

void push(int v)
{
	for (int i : dz[v])
		domnoz(narz[v], narz[i]);
	narz[v].reset();
}

void dodaj(const mac &a, const vec &b, vec &c)
{
	if (a.pusta)
	{
		for (int i=0; i<3; i++)
			c.w[i]+=b.w[i];
	}
	else
	{
		for (int i=0; i<3; i++)
			for (int j=0; j<3; j++)
				c.w[i]+=a.w[i][j]*b.w[j];
	}
	for (int i=0; i<3; i++)
		c.w[i]%=mod;
}

void upd(int v)
{
	pod[v].reset();
	for (int i : dz[v])
		dodaj(narz[i], pod[i], pod[v]);
}

int nal[nax];

vector<pii> otogor[nax];
vector<pii> otodol[nax];

int ma, mb;

int mniej(int a, int b)
{
	int wa=tab[a].first*ma+tab[a].second*mb;
	int wb=tab[b].first*ma+tab[b].second*mb;
	if (wa!=wb)
		return wa<wb;
	return tab[a]<tab[b];
}

int pga[nax];
int pgb[nax];
int pgc[nax];
mac pmac[nax];

int build(vi wek)
{
	if (wek.empty())
		return 0;
	if ((int)wek.size()==1)
	{
		int kt=wek[0];
		m++;
		pod[m]=vectab[kt];
		narz[m].reset();
		px[m]={tab[kt].first, tab[kt].first};
		py[m]={tab[kt].second, tab[kt].second};
		return m;
	}
	int r=wek.size();
	
	const int ile=2;
	
	ma=1;
	mb=0;
	if (rand()&1)
		swap(ma, mb);
	
	sort(wek.begin(), wek.end(), mniej);
	
	for (int i=0; i<r; i++)
		nal[wek[i]]=(ile*i)/r;
	
	vector<vi> podz(ile);
	
	for (int i : wek)
		podz[nal[i]].push_back(i);
	
	m++;
	int tu=m;
	for (int h=0; h<ile; h++)
	{
		dz[tu].push_back(build(podz[h]));
		if (!dz[tu].back())
			dz[tu].pop_back();
	}
	
	px[tu]={inf, -inf};
	py[tu]={inf, -inf};
	for (int i : dz[tu])
	{
		px[tu].first=min(px[tu].first, px[i].first);
		px[tu].second=max(px[tu].second, px[i].second);
		
		py[tu].first=min(py[tu].first, py[i].first);
		py[tu].second=max(py[tu].second, py[i].second);
	}
	
	narz[tu].reset();
	upd(tu);
	return tu;
}

int ga, gb, gc;

mac glomac;
vec wyn;

int eval(pii v)
{
	return ga*v.first+gb*v.second;
}

int czytak(const vector<pii> &wek)
{
	int r=wek.size();
	int bsa=0;
	int bsb=r-1;
	while(bsa<bsb)
	{
		int bss=(bsa+bsb)>>1;
		int el=eval(wek[bss]);
		int ep=eval(wek[bss+1]);
		if (min(el, ep)<gc)
			return 1;
		if (el<ep)
			bsb=bss;
		else
			bsa=bss+1;
	}
	return eval(wek[bsa])<gc;
}

void szuk(int v)
{
	//~ int mini=min(minimum(otodol[v]), minimum(otogor[v]));
	//~ ga*=-1;
	//~ gb*=-1;
	//~ int maxi=-min(minimum(otodol[v]), minimum(otogor[v]));
	//~ ga*=-1;
	//~ gb*=-1;
	
	int mini=min(ga*px[v].first, ga*px[v].second)+min(gb*py[v].first, gb*py[v].second);
	int maxi=max(ga*px[v].first, ga*px[v].second)+max(gb*py[v].first, gb*py[v].second);
	if (mini>=gc)
	{
		return;
	}
	if (maxi<gc)
	{
		dodaj(narz[v], pod[v], wyn);
		domnoz(glomac, narz[v]);
		return;
	}
	
	int natak=0;
	int nanie=0;
	
	if (gb>0)
	{
		natak=czytak(otodol[v]);
		ga*=-1;
		gb*=-1;
		gc*=-1;
		nanie=czytak(otogor[v]);
		ga*=-1;
		gb*=-1;
		gc*=-1;
	}
	else
	{
		natak=czytak(otogor[v]);
		ga*=-1;
		gb*=-1;
		gc*=-1;
		nanie=czytak(otodol[v]);
		ga*=-1;
		gb*=-1;
		gc*=-1;
	}
	
	assert(natak || nanie);
	
	if (!natak)
	{
		return;
	}
	if (!nanie)
	{
		dodaj(narz[v], pod[v], wyn);
		domnoz(glomac, narz[v]);
		return;
	}
	
	assert(!dz[v].empty());
	push(v);
	for (int i : dz[v])
		szuk(i);
	upd(v);
}

vector<pii> glopun;

ll ilowek(pii s, pii a, pii b)
{
	a.first-=s.first;
	a.second-=s.second;
	b.first-=s.first;
	b.second-=s.second;
	return a.first*(ll)b.second-a.second*(ll)b.first;
}

void otoczkuj()
{
	sort(glopun.begin(), glopun.end());
	static vector<pii> oto;
	oto.clear();
	for (pii i : glopun)
	{
		int r=oto.size();
		if (r && i==oto.back())
			continue;
		while(r>=2 && ilowek(oto[r-2], oto[r-1], i)>=0)
		{
			oto.pop_back();
			r--;
		}
		oto.push_back(i);
	}
	oto.swap(glopun);
}

int main()
{
	scanf("%d", &n);
	for (int i=1; i<=n; i++)
	{
		int x, y;
		vec w;
		scanf("%d%d", &x, &y);
		tab[i]={x, y};
		vectab[i].czyt();
	}
	scanf("%d", &q);
	for (int i=1; i<=q; i++)
	{
		scanf("%d%d%d", &pga[i], &pgb[i], &pgc[i]);
		pmac[i].czyt();
	}
	vi k1;
	for (int i=1; i<=n; i++)
		k1.push_back(i);
	int korz=build(k1);
	for (int i=m; i; i--)
	{
		if (dz[i].empty())
		{
			otogor[i]=otodol[i]={{px[i].first, py[i].first}};
			continue;
		}
		glopun.clear();
		for (int j : dz[i])
			for (pii l : otogor[j])
				glopun.push_back(l);
		otoczkuj();
		otogor[i]=glopun;
		
		glopun.clear();
		for (int j : dz[i])
			for (pii l : otodol[j])
				glopun.push_back(l);
		for (pii &j : glopun)
		{
			j.first*=-1;
			j.second*=-1;
		}
		otoczkuj();
		for (pii &j : glopun)
		{
			j.first*=-1;
			j.second*=-1;
		}
		otodol[i]=glopun;
	}
	for (int h=1; h<=q; h++)
	{
		ga=pga[h];
		gb=pgb[h];
		gc=pgc[h];
		glomac=pmac[h];
		wyn=vec();
		
		szuk(korz);
		
		for (int i=0; i<3; i++)
			printf("%lld ", wyn.w[i]);
		printf("\n");
	}
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 20ms
memory: 285284kb

input:

5
1 1 2 3 4
12 12 4 6 1
1 12 5 1 2
12 1 1 5 5
6 6 2 0 3
3
1 1 4 1 1 2 3 4 5 2 3 4
1 1 400 1 3 4 2 1 2 3 4 5
-1 -1 -10 3 2 1 4 6 5 4 3 2

output:

2 3 4 
25 50 40 
92 58 139 

result:

ok 3 lines

Test #2:

score: 0
Accepted
time: 43ms
memory: 283340kb

input:

8
-509 1134 869419079 764178960 818736647
-2836 296 965929020 482991943 829626659
1594 -1045 289612318 572608619 474362463
-2946 -165 85255903 285022572 770151631
-74 -131 732523347 283776652 211209006
-627 -604 539714672 763810142 817996815
-1187 -1219 734874008 764773559 261445054
-18 226 31476550...

output:

242481509 621755738 615459217 
984440526 242571329 417013116 
122667367 215125161 518083968 
594780462 21825000 214574293 

result:

ok 4 lines

Test #3:

score: 0
Accepted
time: 202ms
memory: 290840kb

input:

30000
676 -1234 836467424 502287177 140023561
-2003 -54 939673593 585085650 422504901
14185 -49892 469301115 424738168 942143157
-6019 4933 573698653 956514739 385606216
-1097 -1767 918532462 279450765 873950517
-2732 5210 428418604 607751438 2805137
-2791 1240 250817926 463999452 951276698
-3460 -5...

output:

538200103 176562537 786040129 
282120049 585253989 126746038 
442585365 946639191 152848161 
309217862 352168103 288017696 
798331649 483116583 428411187 
396357116 876189623 301235280 
832917758 314259493 851554086 
129794051 40695662 730810045 
922712284 511389451 59925242 
580263289 336968685 459...

result:

ok 1000 lines

Test #4:

score: 0
Accepted
time: 236ms
memory: 291580kb

input:

30000
-861 514 579191255 606538526 388715812
-2743 143 33760465 13211059 128903675
105 -1848 31959805 331710130 184775255
19 -1110 445507093 115980536 539879344
-1041 41 507163898 642632299 488129195
1471 81 294281682 547102977 542058890
804 -843 987425295 849386341 831783549
-1793 -2178 444562260 3...

output:

545178258 677491591 34959177 
426445915 979131304 126183119 
215187507 759685069 499663658 
200968299 790214661 15389717 
839830981 763311704 525155406 
857030222 464548447 842171760 
658456271 313959441 663157301 
771261247 935340775 339842291 
94545060 716008509 891433021 
347612571 574108893 9409...

result:

ok 1000 lines

Test #5:

score: 0
Accepted
time: 184ms
memory: 288672kb

input:

30000
10549 19178 551387003 459346332 265437020
-4440 -801 346488842 634142290 954669423
-1758 964 418335341 620928953 575285343
-4434 4081 109829333 799485017 24011325
-4527 -24166 664063304 756571635 986936785
-2020 -826 968644308 698506784 869326786
-2700 -7894 94755543 255350611 433336916
-6626 ...

output:

93567974 334118538 550727969 
788441432 886909715 475552713 
526828502 419035304 422234431 
226030179 753442982 68364174 
453395418 329482885 434105443 
15411089 926245366 274889354 
829805395 617738666 67824539 
591388868 172923133 108968027 
491445793 193764448 630342293 
185049502 34074677 601638...

result:

ok 1000 lines

Test #6:

score: 0
Accepted
time: 187ms
memory: 292780kb

input:

30000
729570 -682315 124492027 232374133 480672372
-89810 -111355 986358898 821368981 395456251
167275 -156587 366703017 453206326 674212301
362570 -471220 637350218 819423356 510777066
-256566 369328 923342730 723162512 203219131
-85619 132807 403845003 932528656 550721085
58246 68727 988188769 670...

output:

177234170 706893826 321822432 
51918258 607410764 301981413 
520332556 577378859 923040905 
748810147 59692955 792648057 
715348611 655896889 617831176 
601836304 718124476 848465506 
797797405 409159165 810850490 
467212419 781133102 681159662 
508324225 694481060 155771698 
74229267 592178614 4395...

result:

ok 1000 lines

Test #7:

score: 0
Accepted
time: 139ms
memory: 292704kb

input:

30000
215276 568757 143058747 670589199 352546244
675349 276797 890016278 179562506 916859284
485993 366119 538889148 285689789 926460934
-184492 100853 168179724 850340050 328350589
542050 68798 786636421 318440051 561731640
226406 81944 652753350 969237706 547819021
-143180 485953 369758464 939858...

output:

365510556 899423656 472212247 
119697678 211030227 547616991 
943724197 8064634 987392937 
751180665 973505281 385971334 
146010557 420227720 902462073 
950046809 985538196 710838208 
550105062 384450812 364915306 
671184632 124125952 829362702 
960089545 335852503 982532966 
451317766 825994835 318...

result:

ok 1000 lines

Test #8:

score: 0
Accepted
time: 189ms
memory: 292972kb

input:

30000
11963 26612 563932814 736535581 744632517
-2996 -641 649230390 398487502 776589770
1657 10623 794968118 747797397 59585526
-1289 4706 836020237 90456178 741776740
10179 -7004 847704879 346040819 168119367
21602 16579 515124205 829841195 234479530
-9495 4238 514818687 716733774 820045998
11361 ...

output:

847073709 381148374 516974732 
325834948 765765564 453516874 
352025353 10436598 371323304 
519640707 574307750 444125010 
964483737 141341740 498601658 
122304331 399174936 431259077 
742526585 700279913 545695293 
236747120 378183966 111872419 
373973546 315782774 219011044 
653194034 928721309 67...

result:

ok 1000 lines

Test #9:

score: 0
Accepted
time: 183ms
memory: 290960kb

input:

30000
2313 20 151184035 531728233 996237244
515 -436 420930337 404861517 994681405
2926 -1322 689432222 234158944 272476457
52 530 390434030 44056866 776993283
-120 125 513404791 337625507 139274204
-1510 -588 855754494 303354450 351544403
291 419 471802575 810180275 84881798
-926 203 191026997 8895...

output:

935216674 480722085 384576623 
621069889 322955919 600300871 
538133841 334312373 608592766 
399447778 295652105 484049427 
606144001 591324118 339546480 
453328653 101855275 823859765 
818910344 986178644 528468199 
516357332 825796558 402562947 
380183389 14261509 250494299 
809568025 37546310 730...

result:

ok 1000 lines

Test #10:

score: 0
Accepted
time: 396ms
memory: 292708kb

input:

30000
-3 0 18053028 724837864 201780269
4 -1 369642866 720614816 646577044
-2 3 992365366 938793416 407081706
1 -4 738991115 509688102 673930606
-5 -3 948082291 588327493 257752862
158959 -317919 21154757 755166158 63273074
-231604 463212 308429264 964756648 833312195
-274206 137101 54048637 8096471...

output:

862026374 343842668 392567836 
26146542 777447884 265002500 
519892143 987619881 426932515 
307747538 901692231 98873625 
299878208 896834820 396084450 
518123452 367206424 423709655 
492309974 426180612 43588029 
93883631 234933962 816430356 
941272925 469347297 418005544 
712877801 820259786 20711...

result:

ok 1000 lines

Test #11:

score: 0
Accepted
time: 165ms
memory: 292700kb

input:

30000
-628784 -314394 968049914 611010155 822556658
-3 0 838684476 988751102 498207269
6 -1 158444020 203447175 827072499
-2 2 841964319 627180884 755281158
0 1 413763717 628446147 347356885
-284050 284052 94365801 261989175 608758104
-581295 -290648 374291550 717086259 564713688
73891 -55417 174966...

output:

957939759 686088484 588606155 
357666270 89551368 871461447 
304416932 448365469 240287435 
189543262 819930261 29529388 
991099953 449913997 43461210 
477390988 422207149 985823068 
562575922 578008854 565415569 
204689372 295956274 353515327 
903410183 296376364 476833877 
243697219 390369978 5738...

result:

ok 1000 lines

Test #12:

score: 0
Accepted
time: 342ms
memory: 292696kb

input:

30000
-999828 -999830 173576982 203686018 994555951
-998603 -998590 115320595 714379127 71972197
-998454 -998461 582494909 402300032 56908643
-999936 -999947 309327006 413646683 29938844
-998533 -998540 405243148 585079102 398415243
-999121 -999124 461176875 806714912 415591127
-999368 -999360 81873...

output:

706781663 971336842 722570837 
901431625 707596220 681677130 
732352331 871961411 695587377 
408559767 167863511 861911926 
896487900 934792684 147141981 
493733093 18703611 340196993 
985805162 566839384 988513262 
491465851 966179587 213337874 
679343318 939892014 685452506 
271297173 725622566 52...

result:

ok 1000 lines

Test #13:

score: 0
Accepted
time: 308ms
memory: 290688kb

input:

30000
-998172 -998163 303367951 336827340 741891676
-998613 -998627 978906198 787402624 411749183
-999756 -999760 209847555 827753782 828064940
-998721 -998722 57298138 24146456 133315754
-999055 -999049 485766055 400319901 927614503
-999515 -999512 819375843 657191016 397525265
-998927 -998917 5628...

output:

344833859 511256074 589227250 
160649192 831110888 812776997 
364036365 231766374 134127815 
561228840 82616806 21344553 
492460416 411409491 673466870 
81178955 7782751 53224357 
668188185 936366293 846510789 
447219778 260304026 996347527 
195850491 714970045 82351025 
519868498 352974360 74737778...

result:

ok 1000 lines

Test #14:

score: 0
Accepted
time: 10951ms
memory: 347180kb

input:

300000
6021 230 81186458 630223908 123502523
2206 -531 689274343 832968795 677935
-341 -5215 716916582 683843861 647948947
2201 -1132 238585560 881522585 759965041
-177 -1074 8264009 559321916 639075365
6108 6279 962302528 744228952 68956569
-4693 -2455 441948155 503678773 745829679
-420 -13854 4728...

output:

82983903 179991622 106488484 
681002891 958372672 310322005 
363534694 53035454 56365650 
7875167 569276234 649871689 
308858221 563321281 619554189 
592339933 652542820 630728333 
751354771 257358842 153279350 
641615783 461178965 609603439 
461431233 661609045 84919622 
531356919 122787693 6855663...

result:

ok 15000 lines

Test #15:

score: -100
Time Limit Exceeded

input:

300000
-1541 2074 483711051 775771378 933380329
-1202 937 14941100 95502583 406917332
-397 933 119936225 788956255 184399251
-2102 3773 467131826 239645751 2290676
2072 -263 932141083 104521580 379780700
1158 -1549 370331747 922535291 448464108
-229 -2937 703381418 812044117 231275901
6736 6078 1912...

output:

151554358 46645906 509711997 
957929736 124465982 921338614 
780537979 152135527 222940084 
898910633 706590019 155412491 
666177849 668780531 141518722 
120573053 841195759 693067816 
673859081 914870171 539596578 
797525561 762342396 893229210 
666026033 522635102 678158674 
324491661 430885376 14...

result: