QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#19112 | #1877. Matryoshka Dolls | _siri_ | Compile Error | / | / | C | 1.6kb | 2022-01-28 10:45:22 | 2022-05-18 04:05:39 |
Judging History
你现在查看的是最新测评结果
- [2023-08-10 23:21:45]
- System Update: QOJ starts to keep a history of the judgings of all the submissions.
- [2022-05-18 04:05:39]
- 评测
- 测评结果:Compile Error
- 用时:0ms
- 内存:0kb
- [2022-01-28 10:45:22]
- 提交
answer
#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;
struct section
{
int l, r, num;
};
int n, m, l, r, i, len, a[500001], f[500001], b[500001], ans[500001];
section sec[500001];
set < int > s;
int abs(int x)
{
return x > 0 ? x : -x;
}
bool cmp(section l, section r)
{
return b[l.l] ^ b[r.l] ? l.l < r.l : (b[l.l] & 1 ? l.r < r.r : l.r > r.r);
}
void move(int pos1, int opt)
{
if (opt > 0)
s.insert(a[pos1]);
set < int >::iterator pos, end, last, next;
pos = s.find(a[pos1]);
end = s.end();
if (pos != s.begin())
{
last = --pos;
pos++;
}
if (pos != --end)
{
next = ++pos;
pos--;
}
if (pos == s.begin())
ans[i] += abs(f[*next] - f[*pos]) * opt;
else if (pos == end)
ans[i] += abs(f[*last] - f[*pos]) * opt;
else
ans[i] += (abs(f[*next] - f[*pos]) + abs(f[*pos] - f[*last]) - abs(f[*last] - f[*next])) * opt;
if (opt < 0)
s.erase(pos);
}
int main()
{
scanf("%d%d", &n, &m);
len = sqrt(n);
for(i = 1; i <= n; i++)
{
scanf("%d", a + i);
f[a[i]] = i;
b[i] = (i - 1) / len;
}
for(i = 1; i <= m; sec[i].num = i, i++)
scanf("%d%d", &sec[i].l, &sec[i].r);
sort(sec + 1, sec + m + 1, cmp);
l = 1;
r = 1;
s.insert(a[1]);
for (i = 1; i <= m; i++)
{
ans[i] = ans[i - 1];
while (l > sec[i].l)
move(--l, 1);
while (r < sec[i].r)
move(++r, 1);
while (l < sec[i].l)
move(l++, -1);
while (r > sec[i].r)
move(r--, -1);
}
for (i = 1; i <= m; i++)
printf("%d\n", ans[sec[i].num]);
}
详细
answer.code:1:10: fatal error: cstdio: No such file or directory #include <cstdio> ^~~~~~~~ compilation terminated.