QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#488107#8597. Запити красот пiдмасивiвPetroTarnavskyi#10 487ms31668kbC++233.2kb2024-07-23 16:50:152024-07-23 16:50:16

Judging History

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

  • [2024-07-23 16:50:16]
  • 评测
  • 测评结果:10
  • 用时:487ms
  • 内存:31668kb
  • [2024-07-23 16:50:15]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define RFOR(i, a, b) for(int i = (a) - 1; i >= (b); i--)
#define SZ(a) int(a.size())
#define ALL(a) a.begin(), a.end()
#define PB push_back
#define MP make_pair
#define F first
#define S second

typedef long long LL;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
typedef double db;

const LL LINF = 1e18;

struct SegTree
{
	vector<LL> lazy;
	vector<PLL> t;
	
	void init(int _n)
	{
		int n = 1;
		while(n < _n)
			n *= 2;
		t.assign(2 * n, MP(0, -1));
		lazy.assign(2 * n, 0);
	}
	void build(int v, int tl, int tr, const vector<LL>& vals)
	{
		if(tl + 1 == tr)
		{
			t[v] = MP(vals[tl], tl);
			return;
		}
		int tm = (tl + tr) / 2;
		build(2 * v + 1, tl, tm, vals);
		build(2 * v + 2, tm, tr, vals);
		
		t[v] = max(t[2 * v + 1], t[2 * v + 2]);
	}
	void push(int v, int tl, int tr)
	{
		t[v].F += lazy[v];
		if(tl + 1 != tr)
		{
			lazy[2 * v + 1] += lazy[v];
			lazy[2 * v + 2] += lazy[v];
		}
		lazy[v] = 0;
	}
	void upd(int v, int tl, int tr, int l, int r, int val)
	{
		push(v, tl, tr);
		if(r <= tl || tr <= l)
			return;
		if(l <= tl && tr <= r)
		{
			lazy[v] += val;
			push(v, tl, tr);
			return;
		}
		int tm = (tl + tr) / 2;
		upd(2 * v + 1, tl, tm, l, r, val);
		upd(2 * v + 2, tm, tr, l, r, val);
		
		t[v] = max(t[2 * v + 1], t[2 * v + 2]);
	}
	PLL query(int v, int tl, int tr, int l, int r)
	{
		push(v, tl, tr);
		if(r <= tl || tr <= l)
			return MP(-LINF, -1);
		if(l <= tl && tr <= r)
			return t[v];
		
		int tm = (tl + tr) / 2;
		return max(query(2 * v + 1, tl, tm, l, r),
				   query(2 * v + 2, tm, tr, l, r));
	}
};


int main()
{
	ios::sync_with_stdio(0); 
	cin.tie(0);
	
	int n, q;
	cin >> n >> q;
	
	VI a(n);
	vector<LL> pref(n + 1), rpref(n + 1);
	FOR(i, 0, n)
	{
		cin >> a[i];
	
		pref[i + 1] = pref[i] + a[i];
		rpref[i + 1] = -pref[i + 1];
	}
	SegTree Mx, Mn;
	
	Mx.init(n + 1);
	Mn.init(n + 1);
	
	Mx.build(0, 0, n + 1, pref);
	Mn.build(0, 0, n + 1, rpref);
	
	
	while(q--)
	{
		int t, l, r;
		cin >> t >> l >> r;
		if(t == 1)
		{
			l--;
			
			LL prefR = Mx.query(0, 0, n + 1, r, r + 1).F; 
			LL prefL = Mx.query(0, 0, n + 1, l, l + 1).F; 
			
			LL ans = abs(prefR - prefL);
					
			int pos1 = Mx.query(0, 0, n + 1, l, r + 1).S;
			LL prefPos1 = Mx.query(0, 0, n + 1, pos1, pos1 + 1).F;
			LL cur1 = min(abs(prefPos1 - prefL), abs(prefR - prefPos1));
			ans = max(ans, cur1);
		
			LL pos2 = Mn.query(0, 0, n + 1, l, r + 1).S;
			LL prefPos2 = Mx.query(0, 0, n + 1, pos2, pos2 + 1).F;
			LL cur2 = min(abs(prefPos2 - prefL), abs(prefR - prefPos2));
			ans = max(ans, cur2);
			
			if(pos1 < pos2)
			{
				LL cur = min(min(prefPos1 - prefL, prefPos2 - prefPos1), prefR - prefPos2);
				ans = max(ans, cur);
			}
			else
			{
				LL cur = min(min(prefPos2 - prefL, prefPos1 - prefPos2), prefR - prefPos1);
				ans = max(ans, cur);
			}
			
				
			
			cout << ans << "\n";
		}
		else
		{
			int d = r - a[l - 1];
			a[l - 1] = r;
			
			
			Mx.upd(0, 0, n + 1, l, n + 1, d);
			Mn.upd(0, 0, n + 1, l, n + 1, -d);
		}
	}
	
	
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Time Limit Exceeded

Test #1:

score: 0
Time Limit Exceeded

input:

1000000 1000000
548734664 631285694 511074814 185066089 177199147 524740185 143108778 954318193 103939390 194933972 126964310 977448144 188825490 775722231 460775045 254691982 436971964 566341931 148211711 74910105 923734998 440021758 474275150 717904448 680353276 612974499 712145218 300908726 34722...

output:

251801387395338
230985543990378
233364582761908
165509624203582
383254838720986
448483728625094
365779189638223
259921744673457
396032911262151
463175787332481
396490494773605
379294045009719
380905359946099
248640668979163
372751657582612
250611799614193
382671202614963
249747705028859
377678676465...

result:


Subtask #2:

score: 0
Wrong Answer

Test #7:

score: 0
Wrong Answer
time: 1ms
memory: 3664kb

input:

1000 1000
-873807720 -737050877 797489760 406646247 -750849890 -581119106 43724194 -931326234 -9389547 -684003608 -926307185 -502569356 -461635706 -238087464 -83909772 -884633970 46721429 -576741985 -323890970 -855342249 -736506813 336516318 -4075924 -782227362 56799828 290931118 -471600723 81594380...

output:

9772834244
7971661681
7251185652
5902581650
12301584130
9137214347
10770040139
9693548841
12636393268
9951777555
8590138425
9126178404
8438322412
10469973494
9585010202
12336530829
12305905331
12818655084
9576894451
9228532410
10060968297
12060843219
8619457836
8862797014
12336530829
6408306273
9621...

result:

wrong answer 44th numbers differ - expected: '5882777912', found: '4307081773'

Subtask #3:

score: 10
Accepted

Test #14:

score: 10
Accepted
time: 446ms
memory: 31544kb

input:

200000 200000
580139218 -783262026 565291185 -701435432 -591602198 -342573855 -900284959 -10919966 -682899137 -282058183 963121871 491072571 691886927 761414760 -828585515 888361166 -790814084 145385324 214735368 388759807 -80339362 -975535748 522135695 301673442 36714481 785639770 319723485 1098009...

output:

351460487491
210343422436
312498498649
203192986383
287815765786
245818714404
213968420688
159327542896
169009698075
212975612931
197610853645
255310400798
318802499824
292657635865
313528174745
321957839407
262317902055
187559666100
220264896012
221468083688
294234309666
310907237863
189575747002
1...

result:

ok 200000 numbers

Test #15:

score: 10
Accepted
time: 487ms
memory: 31648kb

input:

200000 200000
216963970 895963907 970921505 973720179 985811250 998640537 999103413 999661484 999729609 999942450 -821783874 781997309 829131735 832477333 892292610 985929024 998231319 999101470 999204347 999373872 473465706 768624229 994843197 999760281 999881158 999973657 999988928 999993358 99999...

output:

112621847444942
101030183697291
63233054628753
80384063266952
115039837711512
95578572948651
143407295417810
60640420205729
72326537106317
97513628293662
111552624754764
88836367993245
60834804129630
81553727338901
100409741576180
65344377179665
95711093922326
112060888712228
73442129454981
65507735...

result:

ok 200000 numbers

Test #16:

score: 10
Accepted
time: 459ms
memory: 31668kb

input:

200000 200000
-824647563 -226311394 73090714 76436719 759867982 803623373 829644660 946127786 957102501 987106779 997539215 999943331 999979160 999991880 999996009 999997678 999999024 999999063 999999274 999999406 999999496 999999684 999999952 999999985 999999992 999999993 999999996 999999998 999999...

output:

107254718306887
59985268718865
160651387958961
113576472431692
94922328063875
159793953406254
103324138822766
134824989111115
123862745746950
169491678824442
91501549032165
99093005632887
139347712481764
122330217459374
84161090195491
89777898364239
162149696406419
120396086999264
88322334520469
615...

result:

ok 200000 numbers

Test #17:

score: 10
Accepted
time: 455ms
memory: 31512kb

input:

200000 200000
-282183530 -94945479 227825325 604182067 992536174 995235520 999623224 999831612 999944208 999969121 999974356 999980957 999988940 999994107 999995968 999998154 999999531 999999584 999999922 999999935 999999969 999999985 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000...

output:

123377619867900
100211431195321
145963538594998
190203444064019
64843966674700
77549625539887
184560557631975
39023969105634
110224991478919
60057393127515
82953877723644
86412104386226
160532783809484
121422800259115
193867540418057
93054646076494
162102767313085
35476495087574
102656767657861
8893...

result:

ok 200000 numbers

Test #18:

score: 10
Accepted
time: 446ms
memory: 31668kb

input:

200000 200000
895486773 904267709 971843319 989242035 997432691 998747539 999923993 999958496 999981782 999997130 999998160 999999003 999999967 999999992 999999996 999999997 999999999 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 100000...

output:

107947399476523
162249388524327
188244246063420
149188588881854
157732011675993
143224891836264
133208454676491
163999809906499
141125758850610
129080307951204
119938099343301
102187458820136
42426020657946
113901944910560
54823208026881
147838531324875
119767412026628
157136338370764
34461988892014...

result:

ok 200000 numbers

Test #19:

score: 10
Accepted
time: 447ms
memory: 31548kb

input:

200000 200000
15691546 982710368 991752623 996635863 999985515 999992516 999995094 999999596 999999991 999999999 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 ...

output:

72523839838926
125348292306559
156051487951881
110134134212103
157069281441772
82917291584024
119805834008914
161199487951881
118949623834329
129858684120921
104031770661480
135286708593556
136516858580023
60306452467633
70864365507686
134657502564275
83413848621308
164520131445345
125642684120921
1...

result:

ok 200000 numbers

Test #20:

score: 10
Accepted
time: 456ms
memory: 31528kb

input:

200000 200000
-90259554 929646040 932381231 965326126 992162797 999519149 999868148 999979048 999996345 999998606 999999942 999999998 999999998 999999999 999999999 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000...

output:

165849002394680
130735002394680
156026002394680
127391002394680
107616002394680
119917002394680
68572000000000
125579002394680
168319002394680
145634002394680
124946002394680
120901002394680
151983002394680
118365002394680
134173002394680
77681002394680
117765002394680
126867002394680
12318900239468...

result:

ok 200000 numbers

Subtask #4:

score: 0
Wrong Answer

Test #21:

score: 0
Wrong Answer
time: 240ms
memory: 31536kb

input:

200000 200000
128744308 920701830 -482412021 59142239 721167306 -622861403 165749748 -449445968 -760679479 -207234657 171482190 -239316743 75518499 -717652242 502074875 -731242646 -183939818 -625333917 -53052313 185734819 -780000096 -563390882 -690210905 596581513 764466021 776717157 -38544163 -7898...

output:

128744308
1049446138
567034117
626176356
1347343662
724482259
890232007
906557623
1347343662
1347343662
1347343662
1347343662
1347343662
1347343662
1347343662
1466264164
1650203982
2275537899
2328590212
2142855393
2922855489
3486246371
4176457276
3579875763
2815409742
2137764691
2099220528
286704480...

result:

wrong answer 71st numbers differ - expected: '3002133635', found: '2435794510'

Subtask #5:

score: 0
Wrong Answer

Test #28:

score: 0
Wrong Answer
time: 467ms
memory: 31668kb

input:

200000 200000
3 -5 -3 3 3 -5 7 -2 2 -4 -4 9 0 -4 -2 2 -5 7 -2 3 -8 1 6 -7 9 -3 -2 4 -2 -2 3 -2 1 0 -3 6 0 -6 -2 6 -5 6 -4 3 2 -4 5 -2 -8 1 1 2 1 -3 3 5 -9 1 3 -2 0 1 -2 1 2 5 -1 -4 -1 -3 7 -7 7 1 -6 7 -1 -5 1 4 -7 6 -3 -4 -1 4 1 5 -7 -3 9 1 -6 2 -3 1 6 -1 -1 1 -1 -5 -3 9 -5 4 -1 3 -2 -4 -4 8 1 0 -9 ...

output:

9
7
8
6
8
4
5
7
9
9
5
9
6
6
9
4
8
9
8
5
6
6
5
7
6
4
5
7
8
5
6
7
5
5
7
7
5
9
7
5
9
5
8
10
5
7
6
8
5
5
6
7
7
6
6
8
4
6
9
4
6
5
6
5
8
6
6
5
5
9
8
5
7
6
4
5
6
6
5
7
4
5
4
4
6
7
9
9
8
9
7
6
5
9
9
7
8
5
9
4
7
8
9
7
8
9
8
8
5
6
8
8
4
6
5
6
6
5
9
6
6
8
9
5
8
6
5
5
7
5
10
7
5
5
6
8
6
8
6
5
6
8
6
5
10
8
7
6
6...

result:

wrong answer 4th numbers differ - expected: '7', found: '6'

Subtask #6:

score: 0
Skipped

Dependency #1:

0%

Subtask #7:

score: 0
Skipped

Dependency #6:

0%

Subtask #8:

score: 0
Skipped

Dependency #6:

0%

Subtask #9:

score: 0
Skipped

Dependency #1:

0%