ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#212157 | #3816. 元素 | Panjunnan | 0 | 5ms | 1292kb | C++ | 2.4kb | 2024-10-13 11:41:41 | 2024-10-13 12:28:14 |
answer
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MAXN = 100005;
int n, q, a[MAXN];
int segTree[4 * MAXN], lazy[4 * MAXN];
int cnt[MAXN];
int getID(int x) {
return lower_bound(cnt, cnt + n, x) - cnt;
}
void update(int node, int start, int end, int l, int r, int val) {
if (lazy[node] != -1) {
segTree[node] = (end - start + 1) * lazy[node];
if (start != end) {
lazy[node * 2] = lazy[node];
lazy[node * 2 + 1] = lazy[node];
}
lazy[node] = -1;
}
if (start > end || start > r || end < l) return;
if (start >= l && end <= r) {
segTree[node] = (end - start + 1) * val;
if (start != end) {
lazy[node * 2] = val;
lazy[node * 2 + 1] = val;
}
return;
}
int mid = (start + end) / 2;
update(node * 2, start, mid, l, r, val);
update(node * 2 + 1, mid + 1, end, l, r, val);
segTree[node] = segTree[node * 2] + segTree[node * 2 + 1];
}
int query(int node, int start, int end, int l, int r) {
if (lazy[node] != -1) {
segTree[node] = (end - start + 1) * lazy[node];
if (start != end) {
lazy[node * 2] = lazy[node];
lazy[node * 2 + 1] = lazy[node];
}
lazy[node] = -1;
}
if (start > end || start > r || end < l) return 0;
if (start >= l && end <= r) return segTree[node];
int mid = (start + end) / 2;
int p1 = query(node * 2, start, mid, l, r);
int p2 = query(node * 2 + 1, mid + 1, end, l, r);
return p1 + p2;
}
int main() {
cin >> n >> q;
for (int i = 1; i <= n; i++) {
cin >> a[i];
cnt[a[i]]++;
}
for (int i = 1; i <= n; i++) {
cnt[i] += cnt[i - 1];
}
int last = 0;
for (int i = 1; i <= n; i++) {
cnt[i] += last;
last = cnt[i];
}
for (int i = 1; i <= n; i++) {
a[i] = getID(a[i]);
}
for (int i = 1; i <= 4 * n; i++) {
segTree[i] = 0;
lazy[i] = -1;
}
for (int i = 1; i <= n; i++) {
update(1, 1, n, i, i, 1);
}
while (q--) {
int l, r;
cin >> l >> r;
int x = query(1, 1, n, l, r) + 1;
int y = r;
while (y - x + 1 > r - l + 1) {
if (query(1, 1, n, l, y) == r - l + 1) break;
y--;
}
cout << y - x + 1 << endl;
}
return 0;
}
详细
小提示:点击横条可展开更详细的信息
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 1224kb
input:
10 10 492 1887 1028 1209 252 1860 1527 699 1656 928 6 9 2 8 3 10 2 3 1 8 6 9 3 5 4 7 1 4 2 7
output:
5 1 2 1 0 5 2 3 0 1
result:
wrong answer 1st numbers differ - expected: '4', found: '5'
Test #2:
score: 0
Wrong Answer
time: 0ms
memory: 1224kb
input:
50 50 413 1208 1780 279 1403 1706 11 1583 333 355 1068 1270 1835 1042 957 423 1140 1153 1709 284 281...
output:
34 11 14 17 43 0 16 9 0 23 10 11 28 29 35 22 17 28 1 44 25 13 21 6 15 6 15 21 6 1 24 36 28 19 29 13 ...
result:
wrong answer 1st numbers differ - expected: '10', found: '34'
Test #3:
score: 0
Wrong Answer
time: 0ms
memory: 1224kb
input:
50 50 407 1089 1459 1626 1917 555 1611 492 443 1149 406 1259 1729 1554 577 1310 1899 1578 1005 1459 ...
output:
1 8 29 6 21 23 3 8 20 1 19 2 0 25 8 24 42 38 25 16 23 12 23 10 10 28 4 18 10 32 45 32 17 23 11 16 4 ...
result:
wrong answer 1st numbers differ - expected: '32', found: '1'
Test #4:
score: 0
Wrong Answer
time: 0ms
memory: 1224kb
input:
50 50 1792 843 1272 547 698 1086 1174 1607 1277 1055 506 881 1445 372 1076 1770 647 1086 320 1912 18...
output:
11 28 2 28 16 18 0 1 25 30 30 4 8 12 30 4 5 2 8 12 26 6 35 7 0 41 11 10 11 6 20 21 0 26 12 4 24 42 3...
result:
wrong answer 1st numbers differ - expected: '34', found: '11'
Test #5:
score: 0
Wrong Answer
time: 1ms
memory: 1228kb
input:
50 50 44 1463 245 1177 1728 1335 768 475 790 623 1466 98 672 230 339 1428 872 1905 405 1260 1503 813...
output:
13 19 8 18 40 30 3 6 6 18 1 15 14 9 33 32 25 9 9 0 8 17 28 38 19 40 32 14 25 14 13 15 2 31 12 3 10 2...
result:
wrong answer 1st numbers differ - expected: '19', found: '13'
Test #6:
score: 0
Wrong Answer
time: 0ms
memory: 1224kb
input:
50 50 695 974 1078 231 500 498 1308 1666 1925 766 1994 1776 1955 1766 1191 1021 1581 1202 615 1230 1...
output:
28 24 18 4 0 8 3 38 21 8 9 39 2 23 3 23 5 24 11 21 24 7 39 15 4 37 5 24 6 2 6 17 10 4 9 15 12 37 12 ...
result:
wrong answer 1st numbers differ - expected: '11', found: '28'
Test #7:
score: 0
Wrong Answer
time: 0ms
memory: 1228kb
input:
200 200 403 329 389 1103 695 1865 818 671 750 1868 1422 422 1186 1431 172 1569 460 1580 406 1049 138...
output:
45 49 180 119 93 8 10 47 57 3 59 12 44 15 39 99 27 99 163 51 22 137 61 0 27 15 75 113 47 4 86 131 13...
result:
wrong answer 1st numbers differ - expected: '131', found: '45'
Test #8:
score: 0
Wrong Answer
time: 0ms
memory: 1228kb
input:
200 200 147 1386 1788 1493 1919 1136 861 871 1895 1006 1776 346 381 1666 296 289 568 1616 1535 531 2...
output:
81 97 7 38 30 19 69 9 10 44 84 115 124 83 65 66 26 134 58 30 118 39 14 76 91 119 2 49 7 119 114 185 ...
result:
wrong answer 1st numbers differ - expected: '103', found: '81'
Test #9:
score: 0
Wrong Answer
time: 0ms
memory: 1292kb
input:
2000 2000 1154 852 1088 1530 639 1318 1250 1222 1341 1070 205 656 903 1491 808 317 756 1962 102 1445...
output:
250 1547 679 106 755 114 25 139 34 479 604 109 502 1041 272 7 476 280 950 1839 89 771 1012 949 320 5...
result:
wrong answer 1st numbers differ - expected: '830', found: '250'
Test #10:
score: 0
Wrong Answer
time: 4ms
memory: 1292kb
input:
2000 2000 1232 731 1651 991 1681 1739 776 240 829 1337 493 248 214 1852 716 325 1280 1207 380 724 11...
output:
586 256 25 207 1048 442 791 390 747 1321 582 1483 1244 314 243 556 272 1079 845 127 496 434 677 327 ...
result:
wrong answer 1st numbers differ - expected: '1062', found: '586'