Submission #1054412

#TimeUsernameProblemLanguageResultExecution timeMemory
1054412KebabuVaikis15Palembang Bridges (APIO15_bridge)C++14
22 / 100
65 ms9668 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN=100000; long long k, n, suma=0, ats=LONG_MAX; char a[MAXN], b[MAXN]; long long x[MAXN], y[MAXN]; vector<tuple<long long, long long, long long>> keliai; long long kPtr=0, vPtr=1, dPtr=0; long long kKairej=0, kDesinej=0, dKairej=0, dDesinej; bool kairej[MAXN]; void tinkintKaire(long long kPos)///////////////////////////// { suma+=2ll*(kPos-get<0>(keliai[kPtr])); kDesinej++; ///Lyg tiesiog atsiranda vienas? ///Problemos cia? // cout<<"Pradedam "<<dPtr<<endl; while (kKairej<kDesinej) { long long pradPos=get<0>(keliai[kPtr]); kPtr++; // cout<<"K"<<kPtr<<endl; // cout<<dPtr<<endl; // cout<<suma<<"->"; suma-=2ll*(get<0>(keliai[kPtr])-pradPos)*(kDesinej-kKairej); // cout<<suma<<endl; if (get<1>(keliai[kPtr])==0) kDesinej--; else kKairej++; } } void tinkintDesine(long long dPos)///////////////////////////// { if (dPos<=get<0>(keliai[dPtr])) dKairej--; ///Problemos cia? // cout<<"Pradedam "<<dPtr<<endl; while (dKairej<dDesinej) { long long pradPos=get<0>(keliai[dPtr]); dPtr++; // cout<<dPtr; while(kairej[get<2>(keliai[dPtr])]) { // cout<<", "<<dPtr; dPtr++; } // cout<<"D"<<dPtr<<endl; // cout<<endl; // cout<<suma<<"->"; suma-=2ll*(get<0>(keliai[dPtr])-pradPos)*(dDesinej-dKairej); // cout<<suma<<endl; if (get<1>(keliai[dPtr])==0) dDesinej--; else dKairej++; } } int main() { cin>>k>>n; for (int i=0; i<n; i++) { cin>>a[i]>>x[i]>>b[i]>>y[i]; if (x[i]>y[i]) swap(x[i], y[i]); suma+=y[i]-x[i]; if (a[i]!=b[i]) { suma++; keliai.push_back(make_tuple(x[i], 0, i)); keliai.push_back(make_tuple(y[i], 1, i)); } } keliai.push_back(make_tuple(0, 0, 0)); sort(keliai.begin(), keliai.end()); // cout<<suma<<endl; // for (auto i:keliai) // cout<<get<0>(i)<<' '<<get<1>(i)<<' '<<get<2>(i)<<endl; for (int i=0; i<n; i++) if (a[i]!=b[i]) suma+=2ll*(x[i]-get<0>(keliai[0])); // cout<<suma<<endl; ats=suma; dDesinej=keliai.size()/2; tinkintDesine(LONG_MAX); if (k==1) { cout<<suma<<endl; return 0; } while (vPtr!=2*n) { vPtr++; while (vPtr<2*n && get<1>(keliai[vPtr])!=0) vPtr++; // cout<<"V"<<vPtr<<endl; if (vPtr==2*n) break; ///Tiesiog pradinis, viskas tvarkoj? kairej[get<2>(keliai[vPtr])]=1; tinkintKaire(get<0>(keliai[vPtr])); tinkintDesine(y[get<1>(keliai[vPtr])]); ats=min(ats, suma); } cout<<ats<<endl; }
#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...