Submission #126428

# Submission time Handle Problem Language Result Execution time Memory
126428 2019-07-07T17:35:53 Z eriksuenderhauf Cake (CEOI14_cake) C++11
0 / 100
599 ms 27484 KB
//#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/rope>
#define mem(a,v) memset((a), (v), sizeof (a))
#define enl printf("\n")
#define case(t) printf("Case #%d: ", (t))
#define ni(n) scanf("%d", &(n))
#define nl(n) scanf("%lld", &(n))
#define nai(a, n) for (int i = 0; i < (n); i++) ni(a[i])
#define nal(a, n) for (int i = 0; i < (n); i++) nl(a[i])
#define pri(n) printf("%d\n", (n))
#define prl(n) printf("%lld\n", (n))
#define pii pair<int, int>
#define pil pair<int, long long>
#define pll pair<long long, long long>
#define vii vector<pii>
#define vil vector<pil>
#define vll vector<pll>
#define vi vector<int>
#define vl vector<long long>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef cc_hash_table<int,int,hash<int>> ht;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> oset;
const double pi = acos(-1);
const int MOD = 1e9 + 7;
const int INF = 1e9 + 7;
const int MAXN = 3e5 + 5;
const double eps = 1e-9;
int a[MAXN], ind[MAXN];
int n, x, q;
int pos[12], loc[MAXN*20];
set<pii> val[2];

void upd(int ind, int t, int v) {
	if (t) { // suffix
		while (!val[t].empty() && (*--val[t].end()).fi >= ind)
			val[t].erase(--val[t].end());
		val[t].insert(mp(ind, v));
	} else {
		while (!val[t].empty() && (*val[t].begin()).fi <= ind)
			val[t].erase(val[t].begin());
		val[t].insert(mp(ind, v));
	}
}

int qry(int ind, int t) {
	if (ind == x) return 1;
	int ret = 0;
	if (t) return (*(--val[t].upper_bound(mp(ind, INF)))).se;
	return (*val[t].lower_bound(mp(ind, -1))).se;
}

int main() {
	scanf("%d %d", &n, &x);
	for (int i = 1; i <= n; ++i)
		ni(a[i]);
	a[0] = INF, a[n+1] = INF;
	int l = x-1, r = x+1;
	loc[1] = x;
	for (int i = 2; i <= n; i++) {
		if (a[l] < a[r]) {
			upd(l, 0, i);
			loc[i] = l--;
		} else {
			upd(r, 1, i);
			loc[i] = r++;
		}
	}
	ni(q);
	int col = n;
	while (q--) {
		char t; scanf(" %c", &t);
		if (t == 'E') {
			int idx, e; scanf("%d %d", &idx, &e);
			if (idx == x) continue;
			for (int i = e+1; i <= 10; i++)
				pos[i] = pos[i-1];
			pos[e] = idx;
			for (int i = e; i > 0; i--) {
				if (pos[i] == 0) continue;
				loc[++col] = pos[i];
				if (pos[i] < x)
					upd(pos[i], 0, col);
				else
					upd(pos[i], 1, col);
			}
		} else {
			int b; scanf("%d", &b);
			int ans = 0;
			if (b == x) {
				pri(ans);
				continue;
			}
			int c = qry(b, b < x ? 0 : 1);
			if (b < x)
				ans += loc[c] - b + 1;
			else if (b > x)
				ans += b - loc[c] + 1;
			int lo = x+1, hi = n;
			while (lo <= hi) {
				int mi = (lo+hi) / 2;
				int col = qry(mi, 1);
				if (col < c)
					lo = mi + 1;
				else
					hi = mi - 1;
			}
			ans += lo;
			lo = 1, hi = x-1;
			while (lo <= hi) {
				int mi = (lo+hi) / 2;
				int col = qry(mi, 0);
				if (col < c)
					hi = mi - 1;
				else
					lo = mi + 1;
			}
			ans -= hi + 1;
			pri(ans-1);
		}
	}
    return 0;
}

Compilation message

cake.cpp: In function 'int qry(int, int)':
cake.cpp:56:6: warning: unused variable 'ret' [-Wunused-variable]
  int ret = 0;
      ^~~
cake.cpp: In function 'int main()':
cake.cpp:62:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &x);
  ~~~~~^~~~~~~~~~~~~~~~~
cake.cpp:9:20: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 #define ni(n) scanf("%d", &(n))
               ~~~~~^~~~~~~~~~~~
cake.cpp:64:3: note: in expansion of macro 'ni'
   ni(a[i]);
   ^~
cake.cpp:9:20: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 #define ni(n) scanf("%d", &(n))
               ~~~~~^~~~~~~~~~~~
cake.cpp:77:2: note: in expansion of macro 'ni'
  ni(q);
  ^~
cake.cpp:80:16: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   char t; scanf(" %c", &t);
           ~~~~~^~~~~~~~~~~
cake.cpp:82:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    int idx, e; scanf("%d %d", &idx, &e);
                ~~~~~^~~~~~~~~~~~~~~~~~~
cake.cpp:96:16: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    int b; scanf("%d", &b);
           ~~~~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 376 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 278 ms 10284 KB Output isn't correct
2 Correct 189 ms 7432 KB Output is correct
3 Incorrect 200 ms 7928 KB Output isn't correct
4 Correct 173 ms 7288 KB Output is correct
5 Incorrect 281 ms 11480 KB Output isn't correct
6 Incorrect 237 ms 10736 KB Output isn't correct
7 Incorrect 217 ms 9200 KB Output isn't correct
8 Correct 179 ms 8748 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 189 ms 7672 KB Output isn't correct
2 Correct 109 ms 7892 KB Output is correct
3 Incorrect 101 ms 7540 KB Output isn't correct
4 Correct 2 ms 376 KB Output is correct
5 Incorrect 287 ms 17092 KB Output isn't correct
6 Incorrect 269 ms 17144 KB Output isn't correct
7 Incorrect 175 ms 16912 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 43 ms 1532 KB Output isn't correct
2 Incorrect 35 ms 1300 KB Output isn't correct
3 Incorrect 74 ms 4472 KB Output isn't correct
4 Incorrect 87 ms 4984 KB Output isn't correct
5 Incorrect 119 ms 3448 KB Output isn't correct
6 Incorrect 136 ms 6480 KB Output isn't correct
7 Incorrect 136 ms 3576 KB Output isn't correct
8 Incorrect 132 ms 9352 KB Output isn't correct
9 Incorrect 599 ms 27484 KB Output isn't correct
10 Incorrect 395 ms 10616 KB Output isn't correct
11 Incorrect 433 ms 11916 KB Output isn't correct
12 Incorrect 550 ms 23776 KB Output isn't correct
13 Incorrect 538 ms 25776 KB Output isn't correct