이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#include <utility>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<int,int> ii;
vector<ii> v;
vector<ii> qv;
int n,q,t;
long long k;
int arr[1000005];
long long qrr[1000005];
bool fly[1000005];
int p[1000005],r[1000005],s[1000005];
int parent(int i){return (i==p[i])?i:p[i]=parent(p[i]);}
long long siz(int i){
long long ans=s[parent(i)];
return (ans*(ans+1))/2;
}
void unions(int i,int j){
i=parent(i);
j=parent(j);
if (r[i]<r[j]){
p[i]=j;
s[j]+=s[i];
}
else{
p[j]=i;
s[i]+=s[j];
if (r[i]==r[j]) r[i]++;
}
}
void f(int i){
if (fly[i-1] && fly[i+1]){
k-=siz(i-1);
k-=siz(i+1);
unions(i-1,i);
unions(i,i+1);
k+=siz(i);
}
else if (fly[i-1]){
k-=siz(i-1);
unions(i-1,i);
k+=siz(i);
}
else if (fly[i+1]){
k-=siz(i+1);
unions(i,i+1);
k+=siz(i);
}
else{
k+=1;
}
fly[i]=true;
}
int main(){
//freopen("meow","r",stdin);
scanf("%d%d",&n,&q);
for (int x=1;x<=n;x++){
scanf("%d",&arr[x]);
v.push_back(ii (arr[x],x));
p[x]=x;
s[x]=1;
}
sort(v.begin(),v.end());
/*for (vector<ii>::iterator it=v.begin();it!=v.end();it++){
printf("%d-%d ",(*it).first,(*it).second);
}*/
for (int x=0;x<q;x++){
scanf("%d",&t);
qv.push_back(ii (t,x));
}
sort(qv.begin(),qv.end());
int h,index;
vector<ii>::iterator it=v.begin();
for (vector<ii>::iterator query=qv.begin();query!=qv.end();query++){
h=(*query).first,index=(*query).second;
while (it!=v.end() && (*it).first<=h){
f((*it).second);
it++;
//printf("%d %d\n",k,(*it).second);
}
qrr[index]=k;
}
for (int x=0;x<q;x++){
printf("%lld\n",qrr[x]);
}
}
컴파일 시 표준 에러 (stderr) 메시지
pilot.cpp: In function 'int main()':
pilot.cpp:58:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
58 | scanf("%d%d",&n,&q);
| ~~~~~^~~~~~~~~~~~~~
pilot.cpp:60:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
60 | scanf("%d",&arr[x]);
| ~~~~~^~~~~~~~~~~~~~
pilot.cpp:70:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
70 | scanf("%d",&t);
| ~~~~~^~~~~~~~~
# | 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... |