Submission #235655

#TimeUsernameProblemLanguageResultExecution timeMemory
235655abacabaDetecting Molecules (IOI16_molecules)C++14
100 / 100
76 ms7160 KiB
#include <iostream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <cstring>
#include <chrono>
#include <vector>
#include <map>
#include <random>
#include <set>
#include <algorithm>
#include <math.h>
#include <cstdio>
#include <stdio.h>
#include <queue>
#include <bitset>
#include <cstdlib>
#include <deque>
#include <cassert>
#include <stack>
using namespace std;

#define mp make_pair
#define f first
#define se second
#define ll long long
#define endl '\n'
#define pii pair<int, int>

inline void setin(string s) {
	freopen(s.c_str(), "r", stdin);
}

inline void setout(string s) {
	freopen(s.c_str(), "w", stdout);
}

const int inf = 2e9 + 5;
const int mod = 1e9 + 7;
const int N = 1e6 + 15;
int n;
ll p[N];
pii a[N];

inline bool lie(ll l, ll x, ll r) {
	return l <= x && x <= r;
}

vector<int> find_subset(int l, int u, vector<int> w) {
	n = w.size();
	for(int i = 0; i < n; ++i)
		a[i+1] = {w[i], i};
	sort(a + 1, a + 1 + n);
	for(int i = 1; i <= n; ++i)
		p[i] = p[i-1] + a[i].f;
	vector <int> ans = {};
	for(int i = 1; i <= n; ++i) {
		int low = 0, up = i - 1, res1 = -1, res2 = -1;
		while(low <= up) {
			int mid = low + up >> 1;
			if(p[i] - p[mid] >= l)
				low = mid + 1, res1 = mid;
			else
				up = mid - 1;
		}
		low = 0, up = i - 1;
		while(low <= up) {
			int mid = low + up >> 1;

			if(p[i] - p[mid] <= u)
				up = mid - 1, res2 = mid;
				else
					low = mid + 1;
		}
		if(res1 != -1 && res2 != -1) {
			if(res1 >= res2) {
				for(int j = res1 + 1; j <= i; ++j)
					ans.push_back(a[j].se);
				return ans;
			}
		}
	}
	return ans;
}

Compilation message (stderr)

molecules.cpp: In function 'std::vector<int> find_subset(int, int, std::vector<int>)':
molecules.cpp:60:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
    int mid = low + up >> 1;
              ~~~~^~~~
molecules.cpp:68:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
    int mid = low + up >> 1;
              ~~~~^~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...