Submission #444317

#TimeUsernameProblemLanguageResultExecution timeMemory
444317KitondsPalembang Bridges (APIO15_bridge)C++14
100 / 100
288 ms14388 KiB
#include <bits/stdc++.h>
 
using namespace std;
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#define read(A) freopen((A + ".in").c_str(),"r",stdin) 
#define write(A) freopen((A + ".out").c_str(),"w",stdout) 
#define ll long long
#define pb push_back
#define ull unsigned long long
#define int long long
#define f first
#define s second
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
typedef pair<int, int> ii;      
typedef vector<ii> vii;      
typedef vector<int> vi; 
typedef vector<ll> vl;
typedef pair<int, ii> iii;
typedef vector<iii> viii;
const int DFS_WHITE = 0;
const int DFS_BLACK = 1;
const int INF = 1e9 + 5;
const int MAXN = 105 ;
const int MOD = 1e9 + 7;

void setIO(string filename = ""){
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	if(filename.size() == 0)
		return;
	read(filename);
	write(filename);
}

struct person
{
	int s, e;
	person(int s_, int e_){
		this->s = s_, this->e = e_;
	}
	bool operator <(const person &y){
		return s + e < y.s + y.e;
	}
};

int n, k, m;
multiset<int> upper, lower;
int cur_low, cur_up;
 
void in(int val){
	int med = (!lower.empty()? *lower.rbegin(): INF);
	if (val > med){
		upper.insert(val);
		cur_up += val;
		if (upper.size() > lower.size() + 1){
			int tmp = *upper.begin();
			lower.insert(tmp);
			upper.erase(upper.find(tmp));
			cur_up -= tmp;
			cur_low += tmp;
		}
	}
	else{
		lower.insert(val);
		cur_low += val;
		if (lower.size() > upper.size() + 1){
			int tmp = *lower.rbegin();
			upper.insert(tmp);
			lower.erase(lower.find(tmp));
			cur_up += tmp;
			cur_low -= tmp;
		}
	}
}

void solve(){
	cin>>m>>n;
	vector<person> A;
	int same = 0;
	for (int i=0; i<n; i++){
		int a, b;
		char c, d;
		cin>>c>>a>>d>>b;
		if (c == d){
			same += abs(a - b);
		}
		else{
			A.pb({a, b});
		}
	}
//	cout<<"A";
	A.pb({0, 0});
	sort(all(A));
	vi pref(A.size(), 0);
	for (int i=1; i<A.size(); i++){
		in(A[i].s);
		in(A[i].e);		
		pref[i] = cur_up - cur_low;
//		cout<<cur_up<<" "<<cur_low<<" "<<*lower.rbegin()<<endl;
//		cout<<A[i].s<<" "<<A[i].e<<endl;
	}
	int ans = pref[A.size() - 1];
	if(m == 2){
		lower.clear();
		upper.clear();
		cur_low = cur_up = 0;
		for (int i=A.size()-1; i>0; i--){
			in(A[i].s);
			in(A[i].e);
			ans = min(ans, cur_up - cur_low + pref[i - 1]);
		}
	}
	cout<<ans + same + A.size() - 1;
}	
	
signed main() {
	setIO();
	int test = 1;
//	cin>>test;
	while(test--){
		solve();
		if (test)
			cout<<endl;
	}
}

Compilation message (stderr)

bridge.cpp:5: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    5 | #pragma GCC optimization ("O3")
      | 
bridge.cpp:6: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    6 | #pragma GCC optimization ("unroll-loops")
      | 
bridge.cpp: In function 'void solve()':
bridge.cpp:97:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<person>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   97 |  for (int i=1; i<A.size(); i++){
      |                ~^~~~~~~~~
bridge.cpp: In function 'void setIO(std::string)':
bridge.cpp:7:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    7 | #define read(A) freopen((A + ".in").c_str(),"r",stdin)
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bridge.cpp:33:2: note: in expansion of macro 'read'
   33 |  read(filename);
      |  ^~~~
bridge.cpp:8:25: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    8 | #define write(A) freopen((A + ".out").c_str(),"w",stdout)
      |                  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bridge.cpp:34:2: note: in expansion of macro 'write'
   34 |  write(filename);
      |  ^~~~~
#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...