Submission #2756897
Source Code Expand
#include <algorithm>
#include <cstdio>
struct data
{
int mn, pos;
inline bool operator <(const data &a) const
{
return mn < a.mn;
}
} seg[800005];
int arr[200005], app[200005], lazy[800005];
inline void paint(int u, int x)
{
seg[u].mn += x;
lazy[u] += x;
}
inline void push_down(int u)
{
if (lazy[u])
{
paint(u << 1, lazy[u]);
paint(u << 1 | 1, lazy[u]);
lazy[u] = 0;
}
}
void build(int u, int l, int r)
{
if (l == r)
{
seg[u] = {app[l], l};
return;
}
int m = l + r >> 1;
build(u << 1, l, m);
build(u << 1 | 1, m + 1, r);
seg[u] = std::min(seg[u << 1], seg[u << 1 | 1]);
}
void modify(int u, int l, int r, int L, int R, int x)
{
if (L <= l && r <= R)
{
paint(u, x);
return;
}
push_down(u);
int m = l + r >> 1;
if (L <= m)
modify(u << 1, l, m, L, R, x);
if (m < R)
modify(u << 1 | 1, m + 1, r, L, R, x);
seg[u] = std::min(seg[u << 1], seg[u << 1 | 1]);
}
data query(int u, int l, int r, int L, int R)
{
if (L <= l && r <= R)
return seg[u];
push_down(u);
int m = l + r >> 1;
if (R <= m)
return query(u << 1, l, m, L, R);
if (m < L)
return query(u << 1 | 1, m + 1, r, L, R);
return std::min(query(u << 1, l, m, L, R), query(u << 1 | 1, m + 1, r, L, R));
}
int main()
{
// freopen("CF17-ex-B.in", "r", stdin);
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", arr + i);
app[i] = arr[i];
}
std::sort(app, app + n);
int cnt = std::unique(app, app + n) - app;
build(1, 0, cnt - 1);
long long ans = 0;
for (int i = 0; i < n; i++)
{
int pos = std::lower_bound(app, app + cnt, arr[i]) - app;
auto res = query(1, 0, cnt - 1, pos, cnt - 1);
ans += res.mn - arr[i];
if (res.pos)
modify(1, 0, cnt - 1, 0, res.pos - 1, 1);
}
printf("%lld\n", ans);
return 0;
}
Submission Info
Submission Time |
|
Task |
B - Increment and Swap |
User |
diamond_duke |
Language |
C++14 (GCC 5.4.1) |
Score |
1500 |
Code Size |
1874 Byte |
Status |
AC |
Exec Time |
162 ms |
Memory |
10368 KB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:69:17: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &n);
^
./Main.cpp:72:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", arr + i);
^
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
1500 / 1500 |
Status |
|
|
Set Name |
Test Cases |
Sample |
example0.txt, example1.txt |
All |
000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, 038.txt, 039.txt, 040.txt, 041.txt, 042.txt, 043.txt, 044.txt, 045.txt, 046.txt, 047.txt, 048.txt, 049.txt, 050.txt, 051.txt, 052.txt, 053.txt, 054.txt, 055.txt, 056.txt, 057.txt, 058.txt, 059.txt, 060.txt, 061.txt, 062.txt, 063.txt, example0.txt, example1.txt |
Case Name |
Status |
Exec Time |
Memory |
000.txt |
AC |
141 ms |
7296 KB |
001.txt |
AC |
140 ms |
7296 KB |
002.txt |
AC |
143 ms |
7296 KB |
003.txt |
AC |
144 ms |
7296 KB |
004.txt |
AC |
145 ms |
7296 KB |
005.txt |
AC |
145 ms |
7296 KB |
006.txt |
AC |
145 ms |
7296 KB |
007.txt |
AC |
150 ms |
7296 KB |
008.txt |
AC |
148 ms |
7296 KB |
009.txt |
AC |
152 ms |
7296 KB |
010.txt |
AC |
150 ms |
7296 KB |
011.txt |
AC |
151 ms |
10368 KB |
012.txt |
AC |
154 ms |
10368 KB |
013.txt |
AC |
154 ms |
10368 KB |
014.txt |
AC |
154 ms |
10368 KB |
015.txt |
AC |
155 ms |
10368 KB |
016.txt |
AC |
155 ms |
10368 KB |
017.txt |
AC |
158 ms |
10368 KB |
018.txt |
AC |
157 ms |
10368 KB |
019.txt |
AC |
157 ms |
10368 KB |
020.txt |
AC |
157 ms |
10368 KB |
021.txt |
AC |
14 ms |
4352 KB |
022.txt |
AC |
134 ms |
7296 KB |
023.txt |
AC |
62 ms |
4736 KB |
024.txt |
AC |
24 ms |
4480 KB |
025.txt |
AC |
83 ms |
4736 KB |
026.txt |
AC |
16 ms |
4352 KB |
027.txt |
AC |
108 ms |
7296 KB |
028.txt |
AC |
53 ms |
4736 KB |
029.txt |
AC |
51 ms |
4736 KB |
030.txt |
AC |
53 ms |
4736 KB |
031.txt |
AC |
111 ms |
7296 KB |
032.txt |
AC |
68 ms |
4736 KB |
033.txt |
AC |
70 ms |
7296 KB |
034.txt |
AC |
119 ms |
7296 KB |
035.txt |
AC |
21 ms |
4480 KB |
036.txt |
AC |
139 ms |
10368 KB |
037.txt |
AC |
106 ms |
7296 KB |
038.txt |
AC |
27 ms |
4480 KB |
039.txt |
AC |
79 ms |
7296 KB |
040.txt |
AC |
71 ms |
7296 KB |
041.txt |
AC |
137 ms |
10368 KB |
042.txt |
AC |
107 ms |
10368 KB |
043.txt |
AC |
107 ms |
10368 KB |
044.txt |
AC |
160 ms |
10368 KB |
045.txt |
AC |
1 ms |
4224 KB |
046.txt |
AC |
34 ms |
4224 KB |
047.txt |
AC |
162 ms |
10368 KB |
048.txt |
AC |
27 ms |
4224 KB |
049.txt |
AC |
33 ms |
4224 KB |
050.txt |
AC |
44 ms |
4224 KB |
051.txt |
AC |
65 ms |
4224 KB |
052.txt |
AC |
92 ms |
4224 KB |
053.txt |
AC |
122 ms |
4480 KB |
054.txt |
AC |
154 ms |
7296 KB |
055.txt |
AC |
24 ms |
4224 KB |
056.txt |
AC |
30 ms |
4224 KB |
057.txt |
AC |
42 ms |
4224 KB |
058.txt |
AC |
58 ms |
4224 KB |
059.txt |
AC |
87 ms |
4224 KB |
060.txt |
AC |
118 ms |
4480 KB |
061.txt |
AC |
148 ms |
7296 KB |
062.txt |
AC |
100 ms |
7296 KB |
063.txt |
AC |
96 ms |
7296 KB |
example0.txt |
AC |
1 ms |
4224 KB |
example1.txt |
AC |
1 ms |
4224 KB |