제출 #894903

#제출 시각아이디문제언어결과실행 시간메모리
894903adkjtPilot (NOI19_pilot)C++14
89 / 100
1063 ms92824 KiB
#include<bits/stdc++.h>
using namespace std;
#define f first
#define s second
#define ll long long
vector<int> g[1111111];
set<pair<int,int>> s;
int a[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];
        //printf("Y");
        for(auto x:g[i])
        {
            //printf("OO");
              if(s.empty()){
                ans[i]+=1,s.insert({x,x});
                continue;
            }
            int cnt=1,rch=0,lch=0;
            auto it=s.lower_bound({x,x});
            if(it==s.end()) rch=1;
            auto itr=it;
            if(it!=s.begin())  itr--;



            pair<int,int> left=*itr,right=*it;
            /*for(auto p=s.begin();p!=s.end();p++)
                printf("%d,%d ",(*p).f,(*p).s);*/
            //printf("\n%d %d %d %d %d\n%d %d\n",x,left.f,left.s,right.f,right.s,lch,rch);

            if(!rch&&!lch&&left.s==x-1&&right.f==x+1)
            {
                  ans[i]-=ind[left.s-left.f+1];
                  ans[i]-=ind[right.s-right.f+1];
                  ans[i]+=ind[right.s-left.f+1];
                  s.erase(it);
                  if(itr!=it)
                  s.erase(itr);
                  s.insert({left.f,right.s});
            }
            else if(!rch&&right.f==x+1)
            {
                ans[i]-=ind[right.s-right.f+1];
                ans[i]+=ind[right.s-x+1];
                s.erase(it);
                s.insert({x,right.s});
            }
            else if(!lch&&left.s==x-1)
            {
                ans[i]-=ind[left.s-left.f+1];
                ans[i]+=ind[x-left.f+1];
                s.erase(itr);
                s.insert({left.f,x});
            }
            else
            ans[i]+=1,s.insert({x,x});

            //printf("LL");
        }
    }
    for(int i=1;i<=q;i++)
    {
        int qu;
        scanf("%lld",&qu);
        if(qu>hmx) qu=hmx;
        printf("%lld\n",ans[qu]);
    }
   /* for(int i=1;i<=hmx;i++)
        printf("%lld ",ind[i]);*/
    return 0;
}

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

pilot.cpp: In function 'int main()':
pilot.cpp:34:17: warning: unused variable 'cnt' [-Wunused-variable]
   34 |             int cnt=1,rch=0,lch=0;
      |                 ^~~
pilot.cpp:80:19: warning: format '%lld' expects argument of type 'long long int*', but argument 2 has type 'int*' [-Wformat=]
   80 |         scanf("%lld",&qu);
      |                ~~~^  ~~~
      |                   |  |
      |                   |  int*
      |                   long long int*
      |                %d
pilot.cpp:13:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   13 |     scanf("%d %d",&n,&q);
      |     ~~~~~^~~~~~~~~~~~~~~
pilot.cpp:18:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |         scanf("%d",&a[i]);
      |         ~~~~~^~~~~~~~~~~~
pilot.cpp:80:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   80 |         scanf("%lld",&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...