Submission #217596

# Submission time Handle Problem Language Result Execution time Memory
217596 2020-03-30T10:28:12 Z dimash241 Cambridge (info1cup18_cambridge) C++17
100 / 100
160 ms 10600 KB
//#pragma GCC target("avx2")
//#pragma GCC optimize("O3")

//# include <x86intrin.h>
# include <bits/stdc++.h>

//# include <ext/pb_ds/assoc_container.hpp>
//# include <ext/pb_ds/tree_policy.hpp>

//using namespace __gnu_pbds;
using namespace std;
 
//template<typename T> using ordered_set = tree <T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

#define _USE_MATH_DEFINES_
#define ll long long
#define ld long double
#define Accepted 0
#define pb push_back
#define mp make_pair
#define sz(x) (int)(x.size())
#define every(x) x.begin(),x.end()
#define F first
#define S second
#define lb lower_bound
#define ub upper_bound
#define For(i,x,y)  for (ll i = x; i <= y; i ++) 
#define FOr(i,x,y)  for (ll i = x; i >= y; i --)
#define SpeedForce ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)
// ROAD to...                                                                                                                                                                                                                Red

inline void Input_Output () {
	//freopen(".in", "r", stdin);
   //freopen(".out", "w", stdout);
}

const double eps = 0.000001;
const ld pi = acos(-1);
const int maxn = 1e7 + 9;
const int mod = 1e9 + 7;
const ll MOD = 1e18 + 9;
const ll INF = 1e18 + 123;
const int inf = 2e9 + 11;
const int mxn = 1e6 + 9;
const int N = 6e5 + 123;                                          
const int M = 22;
const int pri = 997;
const int Magic = 2101;

const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, -1, 0, 1};
 
int n, m, k;
int a[N];
int b[N];
int Pb[N];
int L[N];
ll t[N*4];
ll sum[N*4];
vector < pair<int,int> > val;

int query (int x, int y) {
	return L[y] <= x;
}

void upd (int p, int op, int v = 1, int tl = 0, int tr = n-1) {
	if (tl == tr) {
		sum[v] = 0;
		t[v] = INF;
		if (op == 1) {
			int id = val[p].second;
			t[v] = b[id] - a[id];
			sum[v] = a[id];
			return;
		}

		return;
	}

	int tm = (tl + tr) >> 1;
	if (p <= tm) upd (p, op, v<<1, tl, tm);
	else upd (p, op, v<<1|1, tm + 1, tr);
	t[v] = min(t[v<<1], t[v<<1|1] - sum[v<<1]);
	sum[v] = sum[v<<1] + sum[v<<1|1]; 
}

int main () {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; ++i) {
		scanf("%d%d", &a[i], &b[i]);
		val.pb({b[i], i});
		upd (i-1, -1);
	}
	sort(every(val));
	int ptr = 1;
	for (int i = 1; i <= n; ++i) {
		Pb[i] = lb(every(val), mp(b[i], i)) - val.begin();

		upd(Pb[i], 1);
		while (t[1] <= 0) {
			upd(Pb[ptr], -1);
			++ptr;
		}
		

		L[i] = ptr;
	}


	for (int i = 1; i <= m; ++i) {
		int x, y;
		scanf("%d%d", &x, &y);
		//exit(0);
		printf("%d\n", query(x, y));
	}

	return Accepted;
}

// B...a

Compilation message

cambridge.cpp: In function 'int main()':
cambridge.cpp:88:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &n, &m);
  ~~~~~^~~~~~~~~~~~~~~~
cambridge.cpp:90:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &a[i], &b[i]);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~
cambridge.cpp:112:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &x, &y);
   ~~~~~^~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 129 ms 8568 KB Output is correct
4 Correct 6 ms 512 KB Output is correct
5 Correct 14 ms 1408 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 23 ms 1024 KB Output is correct
4 Correct 39 ms 1504 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 129 ms 8568 KB Output is correct
4 Correct 6 ms 512 KB Output is correct
5 Correct 14 ms 1408 KB Output is correct
6 Correct 23 ms 1024 KB Output is correct
7 Correct 39 ms 1504 KB Output is correct
8 Correct 158 ms 10088 KB Output is correct
9 Correct 160 ms 10092 KB Output is correct
10 Correct 159 ms 10092 KB Output is correct
11 Correct 121 ms 10600 KB Output is correct
12 Correct 121 ms 10092 KB Output is correct
13 Correct 5 ms 384 KB Output is correct