제출 #477357

#제출 시각아이디문제언어결과실행 시간메모리
477357nicolaalexandraXylophone (JOI18_xylophone)C++14
47 / 100
86 ms344 KiB
#include <bits/stdc++.h> #include "xylophone.h" #define DIM 5010 using namespace std; int v[DIM],a[DIM]; int n,i; /* void answer (int i, int val){ cout<<i<<" "<<val<<"\n"; } int query (int x, int y){ int maxi = 0, mini = n+1; for (int i=x;i<=y;i++){ mini = min (mini,a[i]); maxi = max (maxi,a[i]); } return maxi - mini; } */ void divide (int st, int dr, int val, int tip, int capat){ if (st > dr) return; if (!tip){ /// am un mini, deci determin un maxi int maxi,l,r,poz; if (capat){ int dif = query (st,dr+1); maxi = val + dif; l = st, r = dr, poz = 0; while (l <= r){ int mid = (l+r)>>1; if (query (mid,dr+1) == dif){ poz = mid; l = mid+1; } else r = mid-1; } } else { int dif = query (st-1,dr); maxi = val + dif; l = st, r = dr, poz = 0; while (l <= r){ int mid = (l+r)>>1; if (query (st-1,mid) == dif){ poz = mid; r = mid-1; } else l = mid+1; } } v[poz] = maxi; divide (st,poz-1,maxi,1,1); divide (poz+1,dr,maxi,1,0); } else { int mini,l,r,poz; if (capat){ int dif = query (st,dr+1); mini = val - dif; l = st, r = dr; while (l <= r){ int mid = (l+r)>>1; if (query(mid,dr+1) == dif){ l = mid+1; poz = mid; } else r = mid-1; } } else { int dif = query (st-1,dr); mini = val - dif; l = st, r = dr; while (l <= r){ int mid = (l+r)>>1; if (query(st-1,mid) == dif){ r = mid-1; poz = mid; } else l = mid+1; } } v[poz] = mini; divide (st,poz-1,mini,0,1); divide (poz+1,dr,mini,0,0); } } void solve (int n){ /// determin pozitia lui n int st = 1, dr = n, sol_poz; while (st <= dr){ int mid = (st+dr)>>1; if (query(1,mid) == n-1){ sol_poz = mid; dr = mid-1; } else st = mid+1; } v[sol_poz] = n; divide (1,sol_poz-1,n,1,1); divide (sol_poz+1,n,n,1,0); for (int i=1;i<=n;i++) answer (i,v[i]); } /* int main (){ ifstream cin ("date.in"); ofstream cout ("date.out"); cin>>n; for (i=1;i<=n;i++) cin>>a[i]; solve (n); return 0; } */

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

xylophone.cpp: In function 'void divide(int, int, int, int, int)':
xylophone.cpp:100:16: warning: 'poz' may be used uninitialized in this function [-Wmaybe-uninitialized]
  100 |         divide (poz+1,dr,mini,0,0);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~
xylophone.cpp: In function 'void solve(int)':
xylophone.cpp:118:16: warning: 'sol_poz' may be used uninitialized in this function [-Wmaybe-uninitialized]
  118 |     v[sol_poz] = n;
      |     ~~~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...