Submission #366369

#TimeUsernameProblemLanguageResultExecution timeMemory
366369kshitij_sodaniPlanine (COCI21_planine)C++14
50 / 110
632 ms86528 KiB
//#pragma GCC optimize("Ofast,unroll-loops") #include <bits/stdc++.h> using namespace std; typedef long long llo; #define mp make_pair #define pb push_back #define a first #define b second #define endl '\n' llo n,aa; llo xx[1000001]; llo yy[1000001]; vector<pair<llo,llo>> ss; set<pair<llo,llo>> cur; set<pair<llo,llo>> cur2; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n>>aa; for(llo i=0;i<n;i++){ cin>>xx[i]>>yy[i]; } for(llo i=2;i<n-1;i+=2){ /* double ac=((double)aa-yy[i]); ac/=((double)(yy[i+1]-yy[i])); ac*=((double)(xx[i+1]-xx[i]));*/ pair<llo,llo> acc2={(xx[i+1]-xx[i])*(aa-yy[i]),(yy[i+1]-yy[i])}; //acc2.a+=xx[i]*acc2.b; //ac+=xx[i]; pair<llo,llo> bcc2={(xx[i-1]-xx[i])*(aa-yy[i]),(yy[i-1]-yy[i])}; // bcc2.a+=xx[i]*bcc2.b; //ac+=xx[i]; /* double bc=((double)aa-yy[i]); bc/=((double)(yy[i-1]-yy[i])); bc*=((double)(xx[i-1]-xx[i]));*/ //bc+=xx[i]; //cout<<setprecision(10)<<ac<<":"<<bc<<endl; /*ac*=1000000; bc*=1000000; llo acc=round(ac); llo bcc=round(bc);*/ if(n<=2000){ for(llo j=1;j<n;j+=2){ //if(j<i){ if(yy[j]==yy[i]){ continue; } pair<llo,llo> ccc2={(xx[j]-xx[i])*(aa-yy[i]),(yy[j]-yy[i])}; if(j>i){ if(acc2.a*ccc2.b>ccc2.a*acc2.b){ acc2=ccc2; } //acc=min(acc,ccc); } if(j<i){ if(bcc2.a*ccc2.b<ccc2.a*bcc2.b){ bcc2=ccc2; } // bcc=max(bcc,ccc); } //} } } acc2.a+=xx[i]*acc2.b; bcc2.a+=xx[i]*bcc2.b; long double ac=((long double)(acc2.a))/((long double)(acc2.b)); long double bc=((long double)(bcc2.a))/((long double)(bcc2.b)); ac*=10000000; bc*=10000000; llo acc=round(ac); llo bcc=round(bc); swap(acc,bcc); ss.pb({acc,bcc}); //cout<<acc<<","<<bcc<<endl; } //return 0; for(auto j:ss){ cur.insert(j); cur2.insert({j.b,j.a}); } // sort(ss.begin(),ss.end(),cmp); llo ans=0; while(cur2.size()){ ans++; pair<llo,llo> no=*(cur2.begin()); // cout<<no.a<<":"<<no.b<<endl; while(cur.size()){ pair<llo,llo> no2=*(cur.begin()); // cout<<no2.a<<",,"<<no2.b<<endl; if(no2.a<=no.a){ cur.erase(no2); cur2.erase({no2.b,no2.a}); } else{ break; } } //break; } cout<<ans<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...