제출 #425465

#제출 시각아이디문제언어결과실행 시간메모리
425465errorgornPilot (NOI19_pilot)C++17
100 / 100
876 ms61048 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...