Skip to content

Commit b93adee

Browse files
authored
Merge pull request #1351 from tatesoto/feat/range_add_range_min
問題追加 Range Add Range Min
2 parents bc578b1 + b1cd0ef commit b93adee

15 files changed

Lines changed: 908 additions & 0 deletions

File tree

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// https://github.com/MikeMirzayanov/testlib/blob/master/checkers/wcmp.cpp
2+
3+
// The MIT License (MIT)
4+
5+
// Copyright (c) 2015 Mike Mirzayanov
6+
7+
// Permission is hereby granted, free of charge, to any person obtaining a copy
8+
// of this software and associated documentation files (the "Software"), to deal
9+
// in the Software without restriction, including without limitation the rights
10+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
// copies of the Software, and to permit persons to whom the Software is
12+
// furnished to do so, subject to the following conditions:
13+
14+
// The above copyright notice and this permission notice shall be included in all
15+
// copies or substantial portions of the Software.
16+
17+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
// SOFTWARE.
24+
25+
#include "testlib.h"
26+
27+
using namespace std;
28+
29+
int main(int argc, char * argv[])
30+
{
31+
setName("compare sequences of tokens");
32+
registerTestlibCmd(argc, argv);
33+
34+
int n = 0;
35+
string j, p;
36+
37+
while (!ans.seekEof() && !ouf.seekEof())
38+
{
39+
n++;
40+
41+
ans.readWordTo(j);
42+
ouf.readWordTo(p);
43+
44+
if (j != p)
45+
quitf(_wa, "%d%s words differ - expected: '%s', found: '%s'", n, englishEnding(n).c_str(), compress(j).c_str(), compress(p).c_str());
46+
}
47+
48+
if (ans.seekEof() && ouf.seekEof())
49+
{
50+
if (n == 1)
51+
quitf(_ok, "\"%s\"", compress(j).c_str());
52+
else
53+
quitf(_ok, "%d tokens", n);
54+
}
55+
else
56+
{
57+
if (ans.seekEof())
58+
quitf(_wa, "Participant output contains extra tokens");
59+
else
60+
quitf(_wa, "Unexpected EOF in the participants output");
61+
}
62+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
5 7
2+
1 2 3 4 5
3+
1 0 5
4+
0 0 3 3
5+
1 1 4
6+
0 1 4 -5
7+
1 0 3
8+
0 4 5 -100
9+
1 0 5
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#include <cstdio>
2+
#include "../params.h"
3+
4+
using namespace std;
5+
6+
int main() {
7+
int n = (1<<18);
8+
int q = 500000;
9+
10+
printf("%d %d\n", n, q);
11+
for (int i = 0; i < n; i++) {
12+
printf("%d", 0);
13+
if (i != n - 1) printf(" ");
14+
}
15+
printf("\n");
16+
for (int i = 0; i < q; i++) {
17+
int t = (i%2);
18+
printf("%d ", t);
19+
if (t == 0) {
20+
int l = 0, r = n, x = 1;
21+
printf("%d %d %d\n", l, r, x);
22+
} else {
23+
int l = 1, r = n-1;
24+
printf("%d %d\n", l, r);
25+
}
26+
}
27+
return 0;
28+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include <tuple>
2+
#include "../params.h"
3+
#include "random.h"
4+
5+
using namespace std;
6+
7+
int main(int, char* argv[]) {
8+
long long seed = atoll(argv[1]);
9+
auto gen = Random(seed);
10+
11+
int n = N_AND_Q_MAX;
12+
int q = N_AND_Q_MAX;
13+
printf("%d %d\n", n, q);
14+
for (int i = 0; i < n; i++) {
15+
int a = gen.uniform<int>(-A_AND_X_ABS_MAX, A_AND_X_ABS_MAX);
16+
printf("%d", a);
17+
if (i != n - 1) printf(" ");
18+
}
19+
printf("\n");
20+
for (int i = 0; i < q; i++) {
21+
int t = gen.uniform(0, 1);
22+
printf("%d ", t);
23+
if (t == 0) {
24+
int l, r;
25+
tie(l, r) = gen.uniform_pair(0, n);
26+
int x = gen.uniform<int>(-A_AND_X_ABS_MAX, A_AND_X_ABS_MAX);
27+
printf("%d %d %d\n", l, r, x);
28+
} else {
29+
int l, r;
30+
tie(l, r) = gen.uniform_pair(0, n);
31+
printf("%d %d\n", l, r);
32+
}
33+
}
34+
return 0;
35+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#include <cstdio>
2+
#include "../params.h"
3+
4+
using namespace std;
5+
6+
int main() {
7+
int n = (1<<18);
8+
int q = 500000;
9+
10+
printf("%d %d\n", n, q);
11+
for (int i = 0; i < n; i++) {
12+
printf("%d", 0);
13+
if (i != n - 1) printf(" ");
14+
}
15+
printf("\n");
16+
for (int i = 0; i < q; i++) {
17+
int t = (i%2);
18+
printf("%d ", t);
19+
if (t == 0) {
20+
int l = 1, r = n-1, x = 1;
21+
printf("%d %d %d\n", l, r, x);
22+
} else {
23+
int l = 1, r = n-1;
24+
printf("%d %d\n", l, r);
25+
}
26+
}
27+
return 0;
28+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include "random.h"
2+
#include <tuple>
3+
#include "../params.h"
4+
5+
using namespace std;
6+
7+
int main(int, char* argv[]) {
8+
long long seed = atoll(argv[1]);
9+
auto gen = Random(seed);
10+
11+
int n = gen.uniform<int>(1, N_AND_Q_MAX);
12+
int q = gen.uniform<int>(1, N_AND_Q_MAX);
13+
printf("%d %d\n", n, q);
14+
for (int i = 0; i < n; i++) {
15+
int a = gen.uniform<int>(-A_AND_X_ABS_MAX, A_AND_X_ABS_MAX);
16+
printf("%d", a);
17+
if (i != n - 1) printf(" ");
18+
}
19+
printf("\n");
20+
for (int i = 0; i < q; i++) {
21+
int t = gen.uniform(0, 1);
22+
printf("%d ", t);
23+
if (t == 0) {
24+
int l, r;
25+
tie(l, r) = gen.uniform_pair(0, n);
26+
int x = gen.uniform<int>(-A_AND_X_ABS_MAX, A_AND_X_ABS_MAX);
27+
printf("%d %d %d\n", l, r, x);
28+
} else {
29+
int l, r;
30+
tie(l, r) = gen.uniform_pair(0, n);
31+
printf("%d %d\n", l, r);
32+
}
33+
}
34+
return 0;
35+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include "random.h"
2+
#include <tuple>
3+
#include "../params.h"
4+
5+
using namespace std;
6+
7+
int main(int, char* argv[]) {
8+
long long seed = atoll(argv[1]);
9+
auto gen = Random(seed);
10+
11+
int n = seed % 10 + 1;
12+
int q = 1000;
13+
printf("%d %d\n", n, q);
14+
for (int i = 0; i < n; i++) {
15+
int a = gen.uniform<int>(-A_AND_X_ABS_MAX, A_AND_X_ABS_MAX);
16+
printf("%d", a);
17+
if (i != n - 1) printf(" ");
18+
}
19+
printf("\n");
20+
for (int i = 0; i < q; i++) {
21+
int t = gen.uniform(0, 1);
22+
printf("%d ", t);
23+
if (t == 0) {
24+
int l, r;
25+
tie(l, r) = gen.uniform_pair(0, n);
26+
int x = gen.uniform<int>(-A_AND_X_ABS_MAX, A_AND_X_ABS_MAX);
27+
printf("%d %d %d\n", l, r, x);
28+
} else {
29+
int l, r;
30+
tie(l, r) = gen.uniform_pair(0, n);
31+
printf("%d %d\n", l, r);
32+
}
33+
}
34+
return 0;
35+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include "random.h"
2+
#include <tuple>
3+
#include "../params.h"
4+
5+
using namespace std;
6+
7+
int main(int, char* argv[]) {
8+
long long seed = atoll(argv[1]);
9+
auto gen = Random(seed);
10+
11+
int n = gen.uniform<int>(1, 2000);
12+
int q = gen.uniform<int>(1, 2000);
13+
printf("%d %d\n", n, q);
14+
for (int i = 0; i < n; i++) {
15+
int a = gen.uniform<int>(-A_AND_X_ABS_MAX, A_AND_X_ABS_MAX);
16+
printf("%d", a);
17+
if (i != n - 1) printf(" ");
18+
}
19+
printf("\n");
20+
for (int i = 0; i < q; i++) {
21+
int t = gen.uniform(0, 1);
22+
printf("%d ", t);
23+
if (t == 0) {
24+
int l, r;
25+
tie(l, r) = gen.uniform_pair(0, n);
26+
int x = gen.uniform<int>(-A_AND_X_ABS_MAX, A_AND_X_ABS_MAX);
27+
printf("%d %d %d\n", l, r, x);
28+
} else {
29+
int l, r;
30+
tie(l, r) = gen.uniform_pair(0, n);
31+
printf("%d %d\n", l, r);
32+
}
33+
}
34+
return 0;
35+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
{
2+
"example_00.in": "1694f6aeb87d7ab11f8b9579d681288f40a9f1b4b121dd6c8fa4aa27b475aee8",
3+
"example_00.out": "689047587c7c2689076ed726b402331e75357efb10995ad46064d243576c0099",
4+
"max_lazy_00.in": "0b09fcaf4ae59ff0a110559d3ddc6bb4d9100fc11b481cba799d20d1ac4dcea4",
5+
"max_lazy_00.out": "3f962c8a4943242b0999de1e65f5f536a9c47f863326e54f3fe93e365851f998",
6+
"max_random_00.in": "55794f943f7e51ab334fddbb02b7c27c87567ffc809db25a446d0ce83b5a0198",
7+
"max_random_00.out": "8b52791f104ad4c784b6eb50275f0dad7f336a2bc7d4f1c74fb4fc5fb7204c0d",
8+
"max_random_01.in": "adedce181dc1a964bb12f563a312f759fa1863bee2d65768fb8e4ab78d992295",
9+
"max_random_01.out": "63ae8e01564c9704dfde23d238772708ed53c7c323ad448f56f0192fc467b493",
10+
"max_random_02.in": "5f38dea6deaf5eb21214acb1031985c2af05ab2ebe50f3065fc4e6c150cdbe4d",
11+
"max_random_02.out": "3d3a98f619bd1fa5755fc35aa02d732ba705624d977365495e4943f67af0eeb0",
12+
"max_random_03.in": "2df2f5b9ccb1620e965c87fb231b1d934ca3d7869e257e9cda8470397944f551",
13+
"max_random_03.out": "a992b214de085fd64addd3588d29a1af207ddc393ad784c8022fcc677d81e7c3",
14+
"max_random_04.in": "3d737238f5bd83f8687de1e3968561895a473e05db6893c58d4d2ab0ba42469a",
15+
"max_random_04.out": "d93f0f530bc989443de2030e285de92799373dac3c06994abc6ba8bd145b0737",
16+
"max_update_00.in": "8e1092793bbd5091156efcc13cad302bb2e7cce7f67ef8257b14942d830b8fc6",
17+
"max_update_00.out": "3f962c8a4943242b0999de1e65f5f536a9c47f863326e54f3fe93e365851f998",
18+
"random_00.in": "8e7db45a0660228239ad86a65208b449f0de91afb51aa121c764dc4dc11be3f1",
19+
"random_00.out": "dfd09a3fa2815581f46a57f86cd3ea0e46d985120cead641cb38c43b9b50bcf1",
20+
"random_01.in": "024e4c0677f200ec4c42cd933f03453b5596cd5fca856b29ba90bcabc33164ae",
21+
"random_01.out": "11700ac2b7ebb3247bd489a964fb7038e2447061f0bbe8a8c8170bb454ddc89b",
22+
"random_02.in": "55af6b77e5ccb9f60c671a65a2ff9cda910b53d3b8f7be765a551803b7334b35",
23+
"random_02.out": "249b6be0c740f2af19b486693c99a1b3d52c1747b8ca46221d4e2c18ebab2def",
24+
"random_03.in": "0d8e02c94e89e019edd0552fb94272c7044669b7c75b4c7dd8fc5bfae5be7910",
25+
"random_03.out": "7aac2d79b6e649ac60604c12ec2fac17eb28bebc64832258c4f5c25b7002cab0",
26+
"random_04.in": "249280ef011e60ceb9026712b7a627fbe71c0a5d8220563f8b38e2b06699e5a0",
27+
"random_04.out": "dea48f1b616596cfcd8f138946056bd325412af8971a3c36b8ef1767cddbf0e4",
28+
"small_00.in": "56d8c3da24390dc7ae3857bcd1c5a8c354d9fda21cccbb06fb45acdc0da78abd",
29+
"small_00.out": "c454026fd16dc42a3ebcfeece82447e109fa5651e96ce8261fb34a144d9b77dd",
30+
"small_01.in": "ecf7534c72e5ca0205e599899ec79ad6f2ef284c6aa8c9698db538b01a755cc9",
31+
"small_01.out": "4d6c59212937d85dd6939167c448240822fd3f79bda532495c959deb8694bf22",
32+
"small_02.in": "b0a86d3c3c918b38852f7833de2a9cdc3072f9bfeafa9a366c76c2c9d29c3158",
33+
"small_02.out": "17f73aa62de9a91a9d15a470e33eb1f914e996a2a542c7124b5566027597b068",
34+
"small_03.in": "f8ee2a011ba8b6b057b179173fab573ac7efed4fcae32075b614048b655972c5",
35+
"small_03.out": "bb53e6abf537561279b05586fe5e468cdc0b78469dd3e9e263d3ed3a820b5a27",
36+
"small_04.in": "ae253302eef843301795e45f82fd28a83a71dc2cec7d1de524fdcd24253c8565",
37+
"small_04.out": "e513d1a92a74bb780df6c996570f6753657fc26f50d6d67213432a2dfd9873f6",
38+
"small_random_00.in": "0c87745b19af0379b454e644026746120382606de3260029734f059ca39f1cd0",
39+
"small_random_00.out": "bf8fc09474aec91d786033efc541b6119bd1555232f82ba18d31d516d12ba438",
40+
"small_random_01.in": "64eac85ea561bfb05f7aac734fc4c45f5784232d95904eec158d2cfb03cebbc1",
41+
"small_random_01.out": "061f1504c554c5cdef11bbde28536d72772fcd5ff4071bef85a176c83020d60c",
42+
"small_random_02.in": "8b56f63e9d053ea9160b42dce656b65dedc990822ab635abc95ac00284fa3a1c",
43+
"small_random_02.out": "9a84a34c5338a3483f53791d6aa99414d1430736ee301725af1a5689426ab78b",
44+
"small_random_03.in": "71b05e31235cd2c9e228cbf92eab475e668e8da9c2ba7d75b77a77389575679c",
45+
"small_random_03.out": "44e66a5bce977fea857f1f41ed6665e25ea4e9ebc556db0af8b099c1b9b2e4dc",
46+
"small_random_04.in": "8f6ef9040a6e494b4440127148c79f1ad74ddf6235aaa1b5911bc52dce98fad6",
47+
"small_random_04.out": "8e8094d8d237644c6df59e03923113255f06c42bc4d7b65c7827a978703114f0"
48+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
title = 'Range Add Range Min'
2+
timelimit = 5.0
3+
forum = "https://github.com/yosupo06/library-checker-problems/issues/1341"
4+
5+
[[tests]]
6+
name = "example.in"
7+
number = 1
8+
9+
[[tests]]
10+
name = "small_random.cpp"
11+
number = 5
12+
[[tests]]
13+
name = "small.cpp"
14+
number = 5
15+
[[tests]]
16+
name = "random.cpp"
17+
number = 5
18+
[[tests]]
19+
name = "max_random.cpp"
20+
number = 5
21+
22+
[[tests]]
23+
name = "max_lazy.cpp"
24+
number = 1
25+
26+
[[tests]]
27+
name = "max_update.cpp"
28+
number = 1
29+
30+
[[solutions]]
31+
name = "correct_treap.cpp"
32+
33+
[[solutions]]
34+
name = "naive.cpp"
35+
expect = "TLE"
36+
37+
[params]
38+
N_AND_Q_MAX = 500_000
39+
A_AND_X_ABS_MAX = 1_000_000_000

0 commit comments

Comments
 (0)