답안 #955692

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
955692 2024-03-31T10:29:17 Z emad234 말 (IOI15_horses) C++17
54 / 100
1500 ms 63716 KB
#include "horses.h"
#include <bits/stdc++.h>
#define ll long long
#define F first
#define S second
#define pii pair<ll, ll>
const ll mod = 1e9 + 7;
const ll mxN = 5e5 + 5;
using namespace std;
ll NN;
struct tree
{
	vector<pii> seg;
	ll s, e;
	void init(ll n)
	{
		NN = exp2(ceil(log2(n)));
		seg.resize(NN * 4);
	}
	ll queryMax(ll l = 1, ll r = NN, ll ind = 1)
	{
		if (l > e || r < s)
			return 0;
		if (l >= s && r <= e)
			return seg[ind].F;
		ll md = (l + r) / 2;
		return max(queryMax(l, md, ind * 2), queryMax(md + 1, r, ind * 2 + 1));
	}
	ll queryProd(ll l = 1, ll r = NN, ll ind = 1)
	{
		if (l > e || r < s)
			return 1;
		if (l >= s && r <= e)
			return seg[ind].S;
		ll md = (l + r) / 2;
		return (queryProd(l, md, ind * 2) * queryProd(md + 1, r, ind * 2 + 1)) % mod;
	}
	void update(pii val, ll ind)
	{
		ind += NN;
		seg[ind] = val;
		while (ind /= 2)
		{
			seg[ind].F = max(seg[ind * 2].F, seg[ind * 2 + 1].F);
			seg[ind].S = (seg[ind * 2].S * seg[ind * 2 + 1].S) % mod;
		}
	}
} seg;
struct ones
{
	ll l, r;
	friend bool operator<(ones a, ones b)
	{
		return a.l < b.l;
	}
};
set<ones> s;
ll x[mxN], y[mxN];
ll n;
ll solve()
{
	ll st, id = 0;
	ll i = n - 1;
	while (i > 0 && id <= 100)
	{
		if (x[i] == 1)
		{
			auto it = s.upper_bound({i, i});
			it--;
			i = (*it).l;
			id--;
		}
		i--;
		id++;
	}
	if(i == -1) i = 0;
	ll mx = -1, mxid = -1;
	ll prd = 1;
	for (i; i < n; i++)
	{
		if (x[i] == -1)
		{
			auto it = s.lower_bound({i, i});
			seg.s = (*it).l + 1, seg.e = (*it).r + 1;
			ll val = seg.queryMax();
			if (val * prd > mx)
			{
				mx = val;
				mxid = i;
				prd = 1;
			}
			i = (*it).r;
			continue;
		}
		if (prd * x[i] > mx)
		{
			mx = y[i];
			mxid = i;
			prd = 1;
			continue;
		}
		prd *= x[i];
		if (prd * y[i] > mx)
		{
			mx = y[i];
			mxid = i;
			prd = 1;
			continue;
		}
	}
	seg.s = 1;
	seg.e = mxid + 1;
	return (mx * seg.queryProd()) % mod;
}
int init(int N, int X[], int Y[])
{
	seg.init(N);
	n = N;
	for (ll i = 0; i < N; i++)
	{
		y[i] = Y[i];
		x[i] = X[i];
		seg.update({Y[i], X[i]}, i);
	}
	ll l = -1, r = -1;
	for (ll i = 0; i < N; i++)
	{
		if (X[i] == 1)
		{
			if (l == -1)
				l = i;
			r = i;
		}
		else
		{
			if (l != -1)
			{
				s.insert({l, r});
				l = r = -1;
			}
		}
	}
	if (l != -1)
	{
		s.insert({l, r});
		l = r = -1;
	}
	return solve();
}

int updateX(int pos, int val)
{
	if (x[pos] != 1 && val == 1)
	{
		auto it = s.upper_bound({pos, pos});
		ll l = pos, r = pos;
		if (it != s.end() && (*it).l == pos + 1)
		{
			l = pos, r = (*it).r;
			s.erase(it);
			s.insert({l, r});
		}
		else
			s.insert({pos, pos});
		it = s.lower_bound({pos, pos});
		auto p = s.lower_bound({l, r});
		if (it != s.begin())
		{
			it--;
			if ((*it).r == l - 1)
			{
				l = (*it).l;
				s.erase(it);
				s.erase(s.lower_bound({pos, pos}));
				s.insert({l, r});
			}
		}
	}
	if (x[pos] == 1 && val != 1)
	{
		auto it = s.upper_bound({pos, 0});
		it--;
		ll l = (*it).l, r = pos - 1, l1 = pos + 1, r1 = (*it).r;
		s.erase(it);
		if (l <= r)
			s.insert({l, r});
		if (l1 <= r1)
			s.insert({l1, r1});
	}
	x[pos] = val;
	seg.update({y[pos], x[pos]}, pos);
	return solve();
}

int updateY(int pos, int val)
{
	y[pos] = val;
	seg.update({y[pos], x[pos]}, pos);
	return solve();
}

Compilation message

horses.cpp: In member function 'void tree::init(long long int)':
horses.cpp:18:12: warning: conversion from 'double' to 'long long int' may change value [-Wfloat-conversion]
   18 |   NN = exp2(ceil(log2(n)));
      |        ~~~~^~~~~~~~~~~~~~~
horses.cpp: In function 'long long int solve()':
horses.cpp:80:7: warning: statement has no effect [-Wunused-value]
   80 |  for (i; i < n; i++)
      |       ^
horses.cpp:63:5: warning: unused variable 'st' [-Wunused-variable]
   63 |  ll st, id = 0;
      |     ^~
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:149:14: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  149 |  return solve();
      |         ~~~~~^~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:167:8: warning: variable 'p' set but not used [-Wunused-but-set-variable]
  167 |   auto p = s.lower_bound({l, r});
      |        ^
horses.cpp:193:14: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  193 |  return solve();
      |         ~~~~~^~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:200:14: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  200 |  return solve();
      |         ~~~~~^~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 0 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 0 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 1 ms 2396 KB Output is correct
10 Correct 1 ms 2488 KB Output is correct
11 Correct 1 ms 2396 KB Output is correct
12 Correct 1 ms 2396 KB Output is correct
13 Correct 1 ms 2396 KB Output is correct
14 Correct 0 ms 2396 KB Output is correct
15 Correct 1 ms 2396 KB Output is correct
16 Correct 1 ms 2396 KB Output is correct
17 Correct 1 ms 2396 KB Output is correct
18 Correct 0 ms 2396 KB Output is correct
19 Correct 1 ms 2396 KB Output is correct
20 Correct 0 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2392 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 0 ms 2488 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 1 ms 2396 KB Output is correct
10 Correct 1 ms 2648 KB Output is correct
11 Correct 1 ms 2396 KB Output is correct
12 Correct 1 ms 2396 KB Output is correct
13 Correct 1 ms 2396 KB Output is correct
14 Correct 1 ms 2400 KB Output is correct
15 Correct 1 ms 2400 KB Output is correct
16 Correct 1 ms 2400 KB Output is correct
17 Correct 1 ms 2400 KB Output is correct
18 Correct 1 ms 2400 KB Output is correct
19 Correct 1 ms 2400 KB Output is correct
20 Correct 1 ms 2404 KB Output is correct
21 Correct 1 ms 2404 KB Output is correct
22 Correct 1 ms 2404 KB Output is correct
23 Correct 3 ms 2404 KB Output is correct
24 Correct 2 ms 2404 KB Output is correct
25 Correct 1 ms 2404 KB Output is correct
26 Correct 1 ms 2396 KB Output is correct
27 Correct 3 ms 2396 KB Output is correct
28 Correct 3 ms 2392 KB Output is correct
29 Correct 2 ms 2392 KB Output is correct
30 Correct 1 ms 2396 KB Output is correct
31 Correct 2 ms 2396 KB Output is correct
32 Correct 2 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 123 ms 45880 KB Output is correct
2 Correct 176 ms 45952 KB Output is correct
3 Correct 144 ms 45904 KB Output is correct
4 Correct 149 ms 45904 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2648 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 0 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 1 ms 2396 KB Output is correct
10 Correct 1 ms 2396 KB Output is correct
11 Correct 1 ms 2396 KB Output is correct
12 Correct 1 ms 2396 KB Output is correct
13 Correct 1 ms 2396 KB Output is correct
14 Correct 1 ms 2468 KB Output is correct
15 Correct 0 ms 2396 KB Output is correct
16 Correct 1 ms 2396 KB Output is correct
17 Correct 1 ms 2396 KB Output is correct
18 Correct 1 ms 2396 KB Output is correct
19 Correct 1 ms 2396 KB Output is correct
20 Correct 1 ms 2396 KB Output is correct
21 Correct 1 ms 2396 KB Output is correct
22 Correct 1 ms 2396 KB Output is correct
23 Correct 4 ms 2584 KB Output is correct
24 Correct 2 ms 2396 KB Output is correct
25 Correct 1 ms 2648 KB Output is correct
26 Correct 1 ms 2396 KB Output is correct
27 Correct 3 ms 2396 KB Output is correct
28 Correct 2 ms 2396 KB Output is correct
29 Correct 2 ms 2392 KB Output is correct
30 Correct 2 ms 2396 KB Output is correct
31 Correct 2 ms 2396 KB Output is correct
32 Correct 2 ms 2396 KB Output is correct
33 Correct 1118 ms 45440 KB Output is correct
34 Correct 94 ms 49000 KB Output is correct
35 Correct 114 ms 55744 KB Output is correct
36 Correct 103 ms 55856 KB Output is correct
37 Correct 789 ms 47188 KB Output is correct
38 Correct 231 ms 63716 KB Output is correct
39 Execution timed out 1549 ms 47188 KB Time limit exceeded
40 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 0 ms 2396 KB Output is correct
4 Correct 1 ms 2392 KB Output is correct
5 Correct 1 ms 2392 KB Output is correct
6 Correct 0 ms 2396 KB Output is correct
7 Correct 0 ms 2396 KB Output is correct
8 Correct 0 ms 2396 KB Output is correct
9 Correct 1 ms 2392 KB Output is correct
10 Correct 1 ms 2396 KB Output is correct
11 Correct 0 ms 2396 KB Output is correct
12 Correct 0 ms 2396 KB Output is correct
13 Correct 1 ms 2396 KB Output is correct
14 Correct 0 ms 2396 KB Output is correct
15 Correct 1 ms 2392 KB Output is correct
16 Correct 1 ms 2392 KB Output is correct
17 Correct 1 ms 2592 KB Output is correct
18 Correct 1 ms 2396 KB Output is correct
19 Correct 1 ms 2396 KB Output is correct
20 Correct 0 ms 2396 KB Output is correct
21 Correct 1 ms 2396 KB Output is correct
22 Correct 1 ms 2396 KB Output is correct
23 Correct 3 ms 2396 KB Output is correct
24 Correct 2 ms 2392 KB Output is correct
25 Correct 1 ms 2396 KB Output is correct
26 Correct 1 ms 2396 KB Output is correct
27 Correct 3 ms 2396 KB Output is correct
28 Correct 2 ms 2396 KB Output is correct
29 Correct 3 ms 2396 KB Output is correct
30 Correct 2 ms 2396 KB Output is correct
31 Correct 2 ms 2396 KB Output is correct
32 Correct 3 ms 2604 KB Output is correct
33 Correct 123 ms 45908 KB Output is correct
34 Correct 173 ms 45804 KB Output is correct
35 Correct 132 ms 45912 KB Output is correct
36 Correct 148 ms 45908 KB Output is correct
37 Correct 1117 ms 45392 KB Output is correct
38 Correct 92 ms 49000 KB Output is correct
39 Correct 110 ms 55780 KB Output is correct
40 Correct 107 ms 56112 KB Output is correct
41 Correct 789 ms 47472 KB Output is correct
42 Correct 197 ms 63572 KB Output is correct
43 Execution timed out 1542 ms 47060 KB Time limit exceeded
44 Halted 0 ms 0 KB -