제출 #101483

#제출 시각아이디문제언어결과실행 시간메모리
101483errorgorn케이크 (CEOI14_cake)C++14
66.67 / 100
2062 ms5568 KiB
#include <cstdio> #include <vector> #include <utility> #include <deque> using namespace std; typedef pair<int,int> ii; int n,d,q; int E,F; int arr[250005],top[12]; int memo[250005]; ii query[500005]; int f(int i){ if (d==i) return 0; else{ int ans=1; ii a=ii(1000000000,-1), b=ii(1000000000,-1); if (d!=0) a=ii(arr[d-1],d-1); if (d!=n-1) b=ii(arr[d+1],d+1); if (a>b) swap(a,b); while (a.second!=i){ //printf("%d %d\n",a.second,b.second); if (a.second<d){ if (a.second!=0) a=ii(arr[a.second-1],a.second-1); else a=ii(1000000000,-1); } else{ if (a.second!=n-1) a=ii(arr[a.second+1],a.second+1); else a=ii(1000000000,-1); } if (a>b) swap(a,b); ans++; } return ans; } } void memof(){ memo[d]=0; int ans=1; ii a=ii(1000000000,-1), b=ii(1000000000,-1); if (d!=0) a=ii(arr[d-1],d-1); if (d!=n-1) b=ii(arr[d+1],d+1); if (a>b) swap(a,b); while (a.first!=1000000000){ memo[a.second]=ans++; if (a.second<d){ if (a.second!=0) a=ii(arr[a.second-1],a.second-1); else a=ii(1000000000,-1); } else{ if (a.second!=n-1) a=ii(arr[a.second+1],a.second+1); else a=ii(1000000000,-1); } if (a>b) swap(a,b); } } void print(){ for (int x=0;x<n;x++){ printf("%d ",memo[x]); } printf("\n\n"); } int main(){ //freopen("input.txt","r",stdin); int a,b; scanf("%d%d",&n,&d); d--; for (int x=0;x<n;x++){ scanf("%d",&arr[x]); } scanf("%d",&q); for (int x=0;x<q;x++){ getchar(); if (getchar()=='E'){ scanf("%d%d",&a,&b); query[x]=(ii(a-1,b-1)); E++; } else{ scanf("%d",&a); query[x]=(ii(a-1,-1)); F++; } } for (int x=0;x<n;x++){ if (arr[x]>n-10) top[n-arr[x]]=x; } int tb=min(n,10); ii it; if (E<=100){ memof(); for (int __x=0;__x<q;__x++){ it=query[__x]; if ((it).second==-1){ //this is F printf("%d\n",memo[(it).first]); } else{ //this is E arr[(it).first]=arr[top[(it).second]]+1; for (int x=0;x<(it).second;x++){ arr[top[x]]++; } int _x; for (_x=(it).second;_x<tb && top[_x]!=(it).first;_x++){} for (int x=_x;x>(it).second;x--){ top[x]=top[x-1]; } top[(it).second]=(it).first; memof(); //print(); } } } else { for (int __x=0;__x<q;__x++){ it=query[__x]; if ((it).second==-1){ //this is F printf("%d\n",f((it).first)); } else{ //this is E arr[(it).first]=arr[top[(it).second]]+1; for (int x=0;x<(it).second;x++){ arr[top[x]]++; } int _x; for (_x=(it).second;_x<tb && top[_x]!=(it).first;_x++){} for (int x=_x;x>(it).second;x--){ top[x]=top[x-1]; } top[(it).second]=(it).first; } } } }

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

cake.cpp: In function 'int main()':
cake.cpp:65:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&n,&d);
     ~~~~~^~~~~~~~~~~~~~
cake.cpp:68:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d",&arr[x]);
         ~~~~~^~~~~~~~~~~~~~
cake.cpp:70:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d",&q);
     ~~~~~^~~~~~~~~
cake.cpp:74:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d%d",&a,&b);
             ~~~~~^~~~~~~~~~~~~~
cake.cpp:79:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d",&a);
             ~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...