제출 #794732

#제출 시각아이디문제언어결과실행 시간메모리
794732merlinMeetings (IOI18_meetings)C++14
17 / 100
82 ms12360 KiB
#include<bits/stdc++.h> #include "meetings.h" using namespace std; #define ll long long #define f first #define s second void setIO(string name="") { cin.tie(0)->sync_with_stdio(0); if (!name.empty()) { freopen((name+".in").c_str(), "r", stdin); freopen((name+".out").c_str(), "w", stdout); } } struct info{ int best,le,ri,len; info() : best(0),le(0),ri(0),len(0){}; info(int x) : best(x == 1), le(x==1),ri(x==1),len(1){}; }; struct Tree{ int n=1; vector<int> left,right; vector<info> vals; info combine(info a,info b){ //val, left, right info ans; ans.best = max(a.best,max(b.best,a.ri + b.le)); if(a.len == a.best) ans.le = a.best + b.le; else ans.le = a.le; if(b.len == b.best) ans.ri = b.best + a.ri; else ans.ri = b.ri; ans.len = a.len + b.len; return ans; } Tree(int sz,vector<int> &v){ while(n < sz)n*=2; vals = vector<info>(2*n); left = right = vector<int>(2*n,0); for(int i = 0;i<n;i++){ left[i+n] = i; right[i+n] = i+1; if(i < sz){ vals[i+n] = info(v[i]); } } for(int i = n-1;i;i--){ left[i] = left[i*2]; right[i] = right[i*2+1]; vals[i] = combine(vals[i*2],vals[i*2+1]); } } int range_query(int l,int r){ //cerr<<"wtfff "<<l<<" "<<r<<endl; info tmp = range_query(l,r,1); return tmp.best; } info range_query(int l,int r,int cur){ //cerr<<cur<<" "<<l<<" "<<r<<" "<<left[cur]<<" "<<right[cur]<<" "; if(l >= right[cur] || r <= left[cur]){ //cerr<<"mimo"<<endl; return info(); } if(l <= left[cur] && r >= right[cur]){ //cerr<<"cely in"<<endl; return vals[cur]; } //cerr<<"divne"<<endl; return combine(range_query(l,r,cur*2),range_query(l,r,cur*2+1)); } }; vector<ll> minimum_costs(vector<int> H,vector<int> L,vector<int> R){ int q = L.size(),n = H.size(); if(0 && n <= 3000 && q <= 10){ vector<ll> anss; for(int Q = 0;Q<q;Q++){ ll ans = 1e16; for(int i = L[Q];i<=R[Q];i++){ ll tmp = H[i]; ll mx = H[i]; for(int j = i+1;j <= R[Q];j++){ mx = max(mx,(ll)H[j]); tmp += mx; } mx = H[i]; for(int j = i-1;j >= L[Q];j--){ mx = max(mx,(ll)H[j]); tmp += mx; } ans = min(ans,tmp); } anss.push_back(ans); } return anss; } vector<int> tmp; for(auto i : H) tmp.push_back(i == 1 ? 1 : 0); Tree tr(n,tmp); //for(int i = 1;i < 2*tr.n;i++)cerr<<i<<" "<<tr.vals[i]<<" "<<tr.l_vals[i]<<" "<<tr.r_vals[i]<<endl; vector<ll> ans; for(int i = 0;i<q;i++){ //cerr<<L[i]<<" "<<R[i]<<endl; //cerr<<"xd "<<tr.range_query(L[i],R[i]+1)<<endl; ans.push_back(2*(R[i] - L[i] + 1) - tr.range_query(L[i],R[i]+1)); } return ans; }

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

meetings.cpp: In function 'void setIO(std::string)':
meetings.cpp:11:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   11 |   freopen((name+".in").c_str(), "r", stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
meetings.cpp:12:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 |   freopen((name+".out").c_str(), "w", stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...