제출 #1164540

#제출 시각아이디문제언어결과실행 시간메모리
1164540irmuun커다란 상품 (IOI17_prize)C++20
0 / 100
2 ms436 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define ff first #define ss second #define all(s) s.begin(),s.end() #define rall(s) s.rbegin(),s.rend() const int maxn=2e5+5; vector<int>pos,f; int N,mx=0; int L[maxn],R[maxn]; void solve(int l,int r){ if(r<l) return; int mid=(l+r)/2; vector<int>res=ask(mid); L[mid]=res[0]; R[mid]=res[1]; // if(res[0]+res[1]==mx){//u // if(L[pos.back()]==L[mid]){//nothing is between them // for(int i=l;i<=mid;i++){ // L[i]=L[mid]; // R[i]=R[mid]; // pos.pb(i); // } // solve(mid+1,r); // return; // } // solve(l,mid-1); // pos.pb(mid); // solve(mid+1,r); // } // else{ // solve(l,mid-1); // f.pb(mid); // solve(mid+1,r); // } return; } int find_best(int n){ N=n; for(int i=0;i<min(500,n);i++){ vector<int>res=ask(i); L[i]=res[0]; R[i]=res[0]; if(res[0]+res[1]==0){ return i; } mx=max(mx,res[0]+res[1]); } for(int i=0;i<min(500,n);i++){ if(L[i]+R[i]==mx){ pos.pb(i); } else{ f.pb(i); } } if(R[pos.back()]>0){ solve(pos.back()+1,n-1); } for(int i:f){ vector<int>res=ask(i); if(res[0]+res[1]==0){ return i; } } return 0; } // 1 2 5 26 677
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...