QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#446164#8301. Hold the LinelymTL 2141ms54228kbC++202.2kb2024-06-16 22:50:192024-06-16 22:50:20

Judging History

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

  • [2024-06-16 22:50:20]
  • 评测
  • 测评结果:TL
  • 用时:2141ms
  • 内存:54228kb
  • [2024-06-16 22:50:19]
  • 提交

answer

#include<bits/stdc++.h>
using i64 = long long;
const int inf = 1e9 + 10;
struct Block {
	int n, b;
	std::vector<int> blo, a;
	std::vector<std::set<int> > v;
	std::vector<std::set<int> > st;
	void init(int n) {
		this -> n = n;
		this -> b = (int) std::pow(n, 0.48);
		blo.assign(n + 1, 0);
		v.assign(n + 1, {});
		a.assign(n + 1, 0);
		//st.assign(n + 1, {});
		for (int i = 1; i <= n; i ++) {
			blo[i] = (i - 1) / b + 1;
		}
	}
	void add(int x, int c) {
		int p = blo[x];
		v[p].insert(c);
		a[x] = c;
		//st[p].insert(x);
	}
	int query(int l, int r, int c) {
		int res = inf, p = blo[l], q = blo[r];
		/*auto L = st[p].lower_bound(l);
		while (L != st[p].end() && *L <= r) {
			res = std::min(res, std::abs(a[*L] - c));
			L = next(L);
		}*/
		for (int i = l; i <= std::min(r, p * b); i ++) {
			if (a[i]) {
				res = std::min(res, std::abs(a[i] - c));
			}
		}
		if (p == q) return res;
		/*auto R = st[q].begin();
		while (R != st[q].end() && *R <= r) {
			res = std::min(res, std::abs(a[*R] - c));
			R = next(R);
		}*/
		for (int i = (q - 1) * b + 1; i <= r; i ++) {
			if (a[i]) {
				res = std::min(res, std::abs(a[i] - c));
			}
		}

		for (int i = p + 1; i < q; i ++) {
			auto it = v[i].lower_bound(c);
			if (it != v[i].end()) {
				res = std::min(res, std::abs(*it - c));
			}
			if (it != v[i].begin()) {
				it = prev(it);
				res = std::min(res, std::abs(*it - c));
			}
		}
		return res;
	}
};

int read(){
    int red=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){ if(ch=='-') f=-f;ch=getchar();}
    while(ch>='0'&&ch<='9') red=red*10+ch-48,ch=getchar();
    return red*f;
}
void solve() {
	int n, m;
	n = read();
	m = read();
	Block t;
	t.init(n);
	while (m --) {
		int op;
		//std::cin >> op;
		op = read();
		if (op & 1) {
			int l, r, v;
			//std::cin >> l >> r >> v;
			l = read();
			r = read();
			v = read();
			int res = t.query(l, r, v);
			if (res == inf) {
				res = -1;
			}
			std::cout << res << '\n';
		} else {
			int x, v;
			//std::cin >> x >> v;
			x = read();
			v = read();
			t.add(x, v);
		}
	}
}
int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	int t = 1;
	t = read();
	while (t --) {
		solve();
	}
	return 0;
}

詳細信息

Test #1:

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

input:

1
3 5
1 1 3 2
0 1 1
0 3 3
1 1 2 2
1 2 3 2

output:

-1
1
1

result:

ok 3 lines

Test #2:

score: 0
Accepted
time: 150ms
memory: 4032kb

input:

3000
100 200
0 59 64091111
1 10 94 45205032
0 41 67249140
1 15 93 79570187
0 51 83215051
1 3 22 20062363
0 21 5188814
1 43 94 79642299
0 73 39313603
1 43 67 17001771
0 65 10784990
1 51 69 73368509
0 42 57377517
1 36 49 17483147
0 40 67280095
1 3 41 25139505
0 56 22833553
1 26 65 15640242
0 22 189761...

output:

18886079
12321047
-1
3572752
47089340
9277398
39894370
19950691
4855252
2221206
1596905
-1
3120922
34260194
3353597
-1
2499997
-1
15114024
1193064
49448136
734969
3981124
4159424
5836824
61155540
5163746
-1
283130
3982548
-1
-1
-1
9647216
2356693
8711627
379947
70230536
2637615
7856589
153976
148089...

result:

ok 700000 lines

Test #3:

score: 0
Accepted
time: 263ms
memory: 4136kb

input:

300
1000 2000
0 421 19938
1 153 254 35195
0 567 74665
1 88 371 61709
0 689 57559
1 39 744 67718
0 770 25816
1 576 955 75098
0 215 17619
1 133 133 29547
0 207 25038
1 929 965 45024
0 820 40726
1 245 505 82535
0 52 99669
1 631 819 77027
0 436 69966
1 102 243 65413
0 878 73531
1 331 759 23736
0 698 594...

output:

-1
-1
6947
17539
-1
-1
62597
19468
40375
3798
45299
-1
-1
11815
-1
-1
-1
6706
-1
-1
-1
9628
1883
-1
1822
-1
972
978
818
-1
3362
1758
53092
-1
712
-1
16697
-1
-1
1592
11462
-1
24068
12896
335
964
2836
29744
501
-1
-1
2298
1859
-1
6311
10290
2543
1589
838
920
7210
719
631
2781
-1
59401
2809
77412
1149...

result:

ok 700000 lines

Test #4:

score: 0
Accepted
time: 892ms
memory: 5048kb

input:

30
10000 20000
0 6444 22597278
1 940 8167 40648977
0 630 71321002
1 4054 4055 30762754
0 303 59383865
1 3410 3454 1633609
0 3376 42435219
1 6856 7397 92892411
0 1534 14886520
1 474 1932 21770410
0 9387 10819286
1 1640 1726 34316178
0 7331 75627104
1 8763 8764 83586695
0 3923 78696653
1 5016 5016 923...

output:

18051699
-1
-1
-1
6883890
-1
-1
-1
44912717
2247991
-1
5148557
-1
4713193
6643123
2730913
-1
6589982
-1
-1
-1
-1
-1
3691582
-1
1774051
-1
41333276
-1
1422761
-1
-1
-1
-1
895071
-1
692358
-1
2207326
21917947
3850486
-1
53145894
-1
2896385
45348895
3875216
-1
2503573
514164
-1
-1
-1
10502418
-1
458238...

result:

ok 700000 lines

Test #5:

score: 0
Accepted
time: 2141ms
memory: 24332kb

input:

3
100000 200000
0 77354 7
1 24769 44491 1
0 75190 6
1 3816 98172 1
0 45000 4
1 54504 97112 6
0 27855 3
1 53289 54534 9
0 87688 1
1 13220 13577 1
0 31245 7
1 4547 4547 3
0 43311 1
1 429 429 6
0 30798 2
1 28708 84952 4
0 99958 4
1 22719 22734 6
0 46564 3
1 1612 1664 7
0 95692 9
1 77806 93572 9
0 91654...

output:

-1
5
0
-1
-1
-1
-1
0
-1
-1
8
1
-1
-1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
2
-1
-1
-1
-1
-1
3
2
-1
-1
-1
-1
-1
-1
-1
1
-1
1
0
-1
2
0
2
2
-1
-1
-1
-1
-1
-1
-1
-1
-1
6
-1
2
0
-1
5
-1
2
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
0
1
-1
-1
0
0
-1
4
8
-1
-1
0
-1
0
-1
-1
-1
-1
-1
-1
-1
1
0
0
-1
-1
-1
0
-1
-1
-1...

result:

ok 500000 lines

Test #6:

score: 0
Accepted
time: 274ms
memory: 54228kb

input:

1
500000 1000000
0 500000 10611289
1 449739 449917 13213816
0 1 94492701
1 21362 21393 55157967
0 499999 22844866
1 188062 188899 88627032
0 2 16392895
1 436969 437010 47518757
0 499998 74741014
1 339202 339203 89522398
0 3 97448236
1 351554 351622 37177728
0 499997 93234547
1 104463 104504 40778310...

output:

-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

ok 500000 lines

Test #7:

score: -100
Time Limit Exceeded

input:

1
300000 1000000
0 223097 849465603
0 294159 3631397
0 294768 245464219
0 293249 739562156
0 252356 115647988
0 275477 843753533
0 266798 803630592
0 284177 397919995
0 289516 645723272
0 296288 427094934
0 243438 379912048
0 279165 972282807
0 286884 23799613
0 298461 104253087
0 293456 5989076
0 2...

output:

123930
9052
237769906
111093202
641162355
974751
167369
412132
6213
3357797
62696
48557841
381592
25920
76265212
828254902
28954299
657581
1179
72973
449625448
155127907
1259378
133221
1454116
26533961
9818
12000
274889
16099129
65141
3533
1251
804086
88450
3116044
21135
42077970
231804124
19983
781...

result: