이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#define fast ios::sync_with_stdio(false); cin.tie(0)
#define foru(i, k, n) for (int i = k; i < n; i++)
#define ford(i, k, n) for (int i = k; i >= n; i--)
#define pb push_back
#define mp make_pair
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <bitset>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int sz = 1e6 + 5;
struct dsu {
int f[sz], p[sz], rk[sz];
dsu(int n) {
foru(i, 0, n) { f[i] = i; p[i] = 1; rk[i] = 1; }
}
int father(int src) {
if (f[src] != src)return f[src] = father(f[src]);
else return src;
}
bool unite(int a, int b) {
int fa = father(a), fb = father(b);
if (fa == fb)return 0;
if (rk[fa] < rk[fb])swap(fa, fb);
rk[fa] = max(rk[fa], rk[fb] + 1);
f[fb] = fa;
p[fa] += p[fb];
return 1;
}
};
int n, q;
ll h[sz];
pii g[sz];
pii qu[sz];
ll ans[sz];
bitset<sz> on;
void input() {
cin >> n >> q;
foru(i, 0, n) {
cin >> h[i]; g[i].first = h[i];
g[i].second = i;
}
foru(i, 0, q) {
cin >> qu[i].first;
qu[i].second = i;
}
sort(qu, qu + q);
sort(g, g + n);
}
ll calc(ll x) {
return (x * (x + 1)) / 2;
}
int main() {
fast;
input();
dsu d(n);
ll ret = 0;
int ind = 0;
foru(i, 0, q) {
while (ind < n && h[g[ind].second] <= qu[i].first) {
int px = g[ind].second;
on[px] = 1;
if (px && on[px - 1]) {
ret -= calc(d.p[d.father(px - 1)]);
d.unite(px, px - 1);
}
if (px != n - 1 && on[px + 1]) {
ret -= calc(d.p[d.father(px + 1)]);
d.unite(px, px + 1);
}
ret += calc(d.p[d.father(px)]);
ind++;
}
ans[qu[i].second] = ret;
}
foru(i, 0, q)cout << ans[i] << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |