이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,q;
int p[N];
long long sz[N],ans[N];
long long sum=0;
bool vis[N];
vector<pair<int,int>> a,b;
int fp(int u){
if(u==p[u])return u;
return p[u]=fp(p[u]);
}
void merg(int u,int v){
u=fp(u),v=fp(v);
sum-=sz[u]*(sz[u]+1)/2;
sum-=sz[v]*(sz[v]+1)/2;
p[v]=u;
sz[u]+=sz[v];
sz[v]=0;
sum+=sz[u]*(sz[u]+1)/2;
}
int main(){
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n >> q;
iota(p,p+n+1,0);
for(int i=1;i<=n;++i){
int x;
cin >> x;
a.emplace_back(x,i);
sz[i]=1;
}
for(int i=1;i<=q;++i){
int x;
cin >> x;
b.emplace_back(x,i);
}
sort(a.begin(),a.end());
sort(b.begin(),b.end());
int idx=0;
for(auto [h,i]:b){
while(idx<n && a[idx].first<=h){
vis[a[idx].second]=1;
++sum;
if(vis[a[idx].second-1])merg(a[idx].second-1,a[idx].second);
if(vis[a[idx].second+1])merg(a[idx].second+1,a[idx].second);
++idx;
}
ans[i]=sum;
}
for(int i=1;i<=q;++i)cout << ans[i] << '\n';
}
컴파일 시 표준 에러 (stderr) 메시지
pilot.cpp: In function 'int main()':
pilot.cpp:47:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
47 | for(auto [h,i]:b){
| ^
# | 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... |