QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#878096 | #9971. 新本格魔法少女りすか | zlt | 0 | 12345ms | 36200kb | C++14 | 4.2kb | 2025-02-01 13:32:05 | 2025-02-01 13:32:10 |
Judging History
answer
// Problem: P11365 [Ynoi2024] 新本格魔法少女りすか
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P11365
// Memory Limit: 128 MB
// Time Limit: 15000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mkp make_pair
#define uint unsigned
#define mems(a, x) memset((a), (x), sizeof(a))
using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<int, int> pii;
namespace IO {
const int maxn = 1 << 20;
char ibuf[maxn], *iS, *iT, obuf[maxn], *oS = obuf;
inline char gc() {
return (iS == iT ? iT = (iS = ibuf) + fread(ibuf, 1, maxn, stdin), (iS == iT ? EOF : *iS++) : *iS++);
}
template<typename T = int>
inline T read() {
char c = gc();
T x = 0;
bool f = 0;
while (c < '0' || c > '9') {
f |= (c == '-');
c = gc();
}
while (c >= '0' && c <= '9') {
x = (x << 1) + (x << 3) + (c ^ 48);
c = gc();
}
return f ? ~(x - 1) : x;
}
inline void flush() {
fwrite(obuf, 1, oS - obuf, stdout);
oS = obuf;
}
struct Flusher {
~Flusher() {
flush();
}
} AutoFlush;
inline void pc(char ch) {
if (oS == obuf + maxn) {
flush();
}
*oS++ = ch;
}
template<typename T>
inline void write(T x) {
static char stk[64], *tp = stk;
if (x < 0) {
x = ~(x - 1);
pc('-');
}
do {
*tp++ = x % 10;
x /= 10;
} while (x);
while (tp != stk) {
pc((*--tp) | 48);
}
}
template<typename T>
inline void writesp(T x) {
write(x);
pc(' ');
}
template<typename T>
inline void writeln(T x) {
write(x);
pc('\n');
}
}
using IO::read;
using IO::write;
using IO::pc;
using IO::writesp;
using IO::writeln;
const int maxn = 500100;
const int B = 200;
int n, m, a[maxn], bel[maxn], L[maxn], R[maxn], b[maxn], c[maxn];
ll ans[maxn];
vector<pii> qq[maxn];
namespace BIT {
int c[maxn];
inline void update(int x, int d) {
for (int i = x; i <= n; i += (i & (-i))) {
c[i] += d;
}
}
inline int query(int x) {
int res = 0;
for (int i = x; i; i -= (i & (-i))) {
res += c[i];
}
return res;
}
inline void clear(int x) {
for (int i = x; i <= n; i += (i & (-i))) {
c[i] = 0;
}
}
}
void solve() {
n = read();
m = read();
for (int i = 1; i <= n; ++i) {
a[i] = read();
bel[i] = (i - 1) / B + 1;
if (!L[bel[i]]) {
L[bel[i]] = i;
}
R[bel[i]] = i;
}
for (int i = 1, k, l, r; i <= m; ++i) {
k = read();
while (k--) {
l = read();
r = read();
qq[i].pb(l, r);
if (bel[l] == bel[r]) {
for (int j = l; j <= r; ++j) {
ans[i] += BIT::query(a[j]);
}
for (int j = l; j <= r; ++j) {
BIT::update(a[j], 1);
}
} else {
for (int j = l; j <= R[bel[l]]; ++j) {
ans[i] += BIT::query(a[j]);
}
for (int j = L[bel[r]]; j <= r; ++j) {
ans[i] += BIT::query(a[j]);
}
for (int j = l; j <= R[bel[l]]; ++j) {
BIT::update(a[j], 1);
}
for (int j = L[bel[r]]; j <= r; ++j) {
BIT::update(a[j], 1);
}
}
}
for (pii p : qq[i]) {
int l = p.fst, r = p.scd;
if (bel[l] == bel[r]) {
for (int j = l; j <= r; ++j) {
BIT::clear(a[j]);
}
} else {
for (int j = l; j <= R[bel[l]]; ++j) {
BIT::clear(a[j]);
}
for (int j = L[bel[r]]; j <= r; ++j) {
BIT::clear(a[j]);
}
}
}
}
for (int k = 1; k <= bel[n]; ++k) {
mems(b, 0);
for (int i = L[k]; i <= R[k]; ++i) {
++b[a[i]];
}
for (int i = 1; i <= n; ++i) {
b[i] += b[i - 1];
}
for (int i = 1; i <= n; ++i) {
if (i < L[k]) {
c[i] = c[i - 1] + b[a[i] - 1];
} else if (i <= R[k]) {
c[i] = c[i - 1];
} else {
c[i] = c[i - 1] + R[k] - L[k] + 1 - b[a[i]];
}
}
for (int i = 1; i <= m; ++i) {
for (pii p : qq[i]) {
int l = p.fst, r = p.scd;
ans[i] += c[r] - c[l - 1];
}
}
}
for (int i = 1; i <= m; ++i) {
writeln(ans[i]);
}
}
int main() {
int T = 1;
// scanf("%d", &T);
while (T--) {
solve();
}
return 0;
}
详细
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 12345ms
memory: 36200kb
input:
500000 50174 453952 363686 491616 32825 57465 422945 471561 73291 421205 416554 23295 133266 242225 330448 25039 340064 28713 465664 162059 323880 28978 273728 101338 161413 294941 214275 63951 267981 294251 202822 253124 272510 3268 37918 139343 385983 111577 311901 487665 482827 347449 416029 3065...
output:
103814769284 100083121443 111724081386 98514332290 114122962278 91515860517 109359514555 91485650843 98779574171 95514330765 115934010890 111681453493 85779408185 116960620464 107356579987 99121047917 97588615406 96539413135 112099833408 119533534100 100103101055 94822415452 99261059498 94731835959 ...
result:
wrong answer 1st numbers differ - expected: '37140482224', found: '103814769284'
Subtask #2:
score: 0
Wrong Answer
Test #6:
score: 0
Wrong Answer
time: 4245ms
memory: 32624kb
input:
500000 5 157360 289139 98034 293691 150262 268366 36782 147093 365410 444658 343224 375392 278298 357620 389673 167019 7747 119244 102126 83512 3649 459230 197365 245259 38071 249539 34617 213697 292553 389625 395778 280152 280038 239519 301475 232272 145919 370004 422791 271143 488283 185166 351026...
output:
163284528119 162789734722 163394169907 163119890232 163432091187
result:
wrong answer 1st numbers differ - expected: '50666226791', found: '163284528119'
Subtask #3:
score: 0
Skipped
Dependency #1:
0%