Submission #126438

# Submission time Handle Problem Language Result Execution time Memory
126438 2019-07-07T18:16:22 Z eriksuenderhauf Cake (CEOI14_cake) C++11
0 / 100
647 ms 21380 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;
	set<pii> b;
	for (int i = 2; i <= n; i++) {
		if (a[l] < a[r]) {
			b.insert(mp(a[l], l));
			upd(l, 0, i);
			loc[i] = l--;
		} else {
			b.insert(mp(a[r], r));
			upd(r, 1, i);
			loc[i] = r++;
		}
		while (b.size() > 10)
			b.erase(b.begin());
	}
	int col = 0;
	for (auto it: b)
		pos[b.size() - col++] = it.se;
	ni(q);
	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;
			//for (int i = 1; i <= n; i++)
			//	if (qry(i, i < x ? 0 : 1) < c)
			//		ans++;
			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:85:2: note: in expansion of macro 'ni'
  ni(q);
  ^~
cake.cpp:88: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:90: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:104: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 Correct 2 ms 376 KB Output is correct
2 Incorrect 2 ms 380 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 315 ms 7912 KB Output isn't correct
2 Incorrect 226 ms 4944 KB Output isn't correct
3 Correct 244 ms 5468 KB Output is correct
4 Correct 170 ms 2908 KB Output is correct
5 Incorrect 327 ms 8712 KB Output isn't correct
6 Incorrect 272 ms 7800 KB Output isn't correct
7 Correct 261 ms 6532 KB Output is correct
8 Correct 179 ms 3676 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 199 ms 6748 KB Output isn't correct
2 Incorrect 114 ms 6528 KB Output isn't correct
3 Incorrect 114 ms 6508 KB Output isn't correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 283 ms 14912 KB Output is correct
6 Incorrect 290 ms 14968 KB Output isn't correct
7 Incorrect 190 ms 14868 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 44 ms 1260 KB Output isn't correct
2 Incorrect 38 ms 1084 KB Output isn't correct
3 Incorrect 82 ms 3832 KB Output isn't correct
4 Incorrect 89 ms 4344 KB Output isn't correct
5 Incorrect 122 ms 2424 KB Output isn't correct
6 Correct 137 ms 5376 KB Output is correct
7 Correct 135 ms 2552 KB Output is correct
8 Correct 160 ms 7936 KB Output is correct
9 Incorrect 622 ms 21380 KB Output isn't correct
10 Incorrect 397 ms 7252 KB Output isn't correct
11 Incorrect 440 ms 8952 KB Output isn't correct
12 Incorrect 647 ms 19112 KB Output isn't correct
13 Incorrect 594 ms 20612 KB Output isn't correct