제출 #894913

#제출 시각아이디문제언어결과실행 시간메모리
894913adkjtPilot (NOI19_pilot)C++14
100 / 100
582 ms100644 KiB
#include<bits/stdc++.h>
using namespace std;
#define f first
#define s second
#define ll long long
vector<int> g[1111111];
int a[1111111],vis[1111111],l[1111111],r[1111111];
long long ans[1111111],ind[1111111];
int main()
{
    int n,q,hmx=0;
    scanf("%d %d",&n,&q);
    for(int i=1;i<=n;i++)
        ind[i]=ind[i-1]+i;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        hmx=max(hmx,a[i]);
        g[a[i]].push_back(i);
    }
    //s.insert({0,0});
    for(int i=1;i<=hmx;i++)
    {
        ans[i]=ans[i-1];
        for(auto x:g[i])
        {
            if(!vis[x-1]&&!vis[x+1])
            {
                vis[x]++;
                l[x]=x,r[x]=x;
                ans[i]++;
            }
            else if(vis[x-1]&&!vis[x+1])
            {
                vis[x]++;
                l[x]=l[x-1];
                r[x]=x;
                r[l[x-1]]=r[x];
                ans[i]-=ind[x-l[x]];
                ans[i]+=ind[x-l[x]+1];
            }
            else if(!vis[x-1]&&vis[x+1])
            {
                vis[x]++;
                l[x]=x;
                r[x]=r[x+1];
                l[r[x+1]]=l[x];
                ans[i]-=ind[r[x]-x];
                ans[i]+=ind[r[x]-x+1];
            }
            else if(vis[x-1]&&vis[x+1])
            {
                vis[x]++;
                l[x]=l[x-1];
                r[x]=r[x+1];
                l[r[x+1]]=l[x];
                r[l[x-1]]=r[x];
                ans[i]-=ind[x-l[x]];
                ans[i]-=ind[r[x]-x];
                ans[i]+=ind[r[x]-l[x]+1];
                //printf("%lld %lld %lld\n",ind[x-l[x]],ind[r[x]-x],ind[r[x]-l[x]+1]);
            }
        }
    }
    for(int i=1;i<=q;i++)
    {
        int qu;
        scanf("%d",&qu);
        if(qu>hmx) qu=hmx;
        printf("%lld\n",ans[qu]);
    }
    /*for(int i=1;i<=hmx;i++)
        printf("%lld ",ans[i]);*/
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

pilot.cpp: In function 'int main()':
pilot.cpp:12:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 |     scanf("%d %d",&n,&q);
      |     ~~~~~^~~~~~~~~~~~~~~
pilot.cpp:17:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   17 |         scanf("%d",&a[i]);
      |         ~~~~~^~~~~~~~~~~~
pilot.cpp:68:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   68 |         scanf("%d",&qu);
      |         ~~~~~^~~~~~~~~~
#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...