Submission #904863
Source Code Expand
#include <cstdint>
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
typedef int64_t i64;
static inline void MAZ(int &a, int b) {if(a < b) a = b;}
static inline void MIZ(int &a, int b) {if(b < a) a = b;}
static const auto NMAX = 200000;
static int N, A[NMAX], P[NMAX];
static int boz[NMAX], siz[NMAX], lef[NMAX], rig[NMAX];
static int find(int x) {
return boz[x] == x ? x : (boz[x] = find(boz[x]));
}
static void merge(int a, int b) {
a = find(a);
b = find(b);
if(siz[a] < siz[b]) swap(a, b);
boz[b] = a;
siz[a] += siz[b];
MIZ(lef[a], lef[b]);
MAZ(rig[a], rig[b]);
}
int main() {
scanf("%d", &N);
for(auto i = 0; i < N; i++) {
int x;
scanf("%d", &x); x--;
A[i] = x;
P[x] = i;
}
for(auto i = 0; i < N; i++) boz[i] = i;
for(auto i = 0; i < N; i++) siz[i] = 1;
for(auto i = 0; i < N; i++) lef[i] = i;
for(auto i = 0; i < N; i++) rig[i] = i;
i64 ret = 0;
for(auto i = N; --i >= 0; ) {
auto p = P[i];
if(p - 1 >= 0 && A[p - 1] > i) merge(p, p - 1);
if(p + 1 < N && A[p + 1] > i) merge(p, p + 1);
auto q = find(p);
ret += (i64)(i + 1) * (p - lef[q] + 1) * (rig[q] - p + 1);
}
cout << ret << endl;
return 0;
}
Submission Info
| Submission Time |
|
| Task |
B - Minimum Sum |
| User |
arosusti |
| Language |
C++14 (GCC 5.4.1) |
| Score |
400 |
| Code Size |
1226 Byte |
| Status |
AC |
| Exec Time |
36 ms |
| Memory |
4864 KiB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:30:17: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &N);
^
./Main.cpp:33:18: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &x); x--;
^
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
400 / 400 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
example0, example1, example2 |
| All |
corner0, corner1, corner2, corner3, example0, example1, example2, maxrand0, maxrand1, maxrand2, rand0, rand1, rand2 |
| Case Name |
Status |
Exec Time |
Memory |
| corner0 |
AC |
28 ms |
4864 KiB |
| corner1 |
AC |
28 ms |
4864 KiB |
| corner2 |
AC |
3 ms |
256 KiB |
| corner3 |
AC |
29 ms |
4864 KiB |
| example0 |
AC |
3 ms |
256 KiB |
| example1 |
AC |
3 ms |
256 KiB |
| example2 |
AC |
3 ms |
256 KiB |
| maxrand0 |
AC |
36 ms |
4864 KiB |
| maxrand1 |
AC |
36 ms |
4864 KiB |
| maxrand2 |
AC |
35 ms |
4864 KiB |
| rand0 |
AC |
3 ms |
256 KiB |
| rand1 |
AC |
3 ms |
256 KiB |
| rand2 |
AC |
3 ms |
256 KiB |