답안 #385453

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
385453 2021-04-04T10:46:53 Z Return_0 Sterilizing Spray (JOI15_sterilizing) C++17
10 / 100
250 ms 37868 KB
#pragma GCC optimize("Ofast,unroll-loops")
// #pragma comment(linker, "/stack:200000000")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma,tune=native")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef long double ld;
typedef pair <ll, ll> pll;

#ifdef SINA
#define dbg(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1> void __f(const char* name, Arg1&& arg1) { cout << name << " : " << arg1 << std::endl; }
template <typename Arg1, typename... Args> void __f (const char* names, Arg1&& arg1, Args&&... args) {
	const char* comma = strchr(names + 1, ',');cout.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...); }
#define dbg2(x, j, n) cout<< #x << " : "; output((j), (n), x, 1); cout.flush();
#else
#define dbg(...) 0
#define dbg2(x, j, n) 0
#endif
#define SZ(x) ((ll)((x).size()))
#define File(s, t) freopen(s ".txt", "r", stdin); freopen(t ".txt", "w", stdout);
#define input(j, n, a) for (int _i = (j); _i < (n)+(j); _i++) cin>> a[_i];
#define output(j, n, a, t) for (int _i = (j); _i < (n)+(j); _i++) cout<< a[_i] << (((t) && _i != (n)+(j)-1)? ' ' : '\n');
#define kill(x) return cout<< (x) << endl, 0
#define cl const ll
#define fr first
#define sc second
#define lc (v << 1)
#define rc (lc | 1)
#define mid ((l + r) >> 1)
#define All(x) (x).begin(), (x).end()

cl inf = sizeof(ll) == 4 ? (1e9 + 10) : (3e18), mod = 1e9 + 7, MOD = 998244353;

template <class A,class B> ostream& operator << (ostream& out,const pair<A,B>&a){return out<<'('<<a.first<<", "<<a.second<<')';}
template <class A> ostream& operator << (ostream& out, const vector<A> &a) {
	out<< '['; for (int i = -1; ++i < int(a.size());) out<< a[i] << (i + 1 < int(a.size()) ? ", " : ""); return out<<']'; }
template <class T, typename _t = less <T> > using Tree = tree <T, null_type, _t, rb_tree_tag, tree_order_statistics_node_update>;

cl N = 1e5 + 7;

ll a [N], n, k, tf = 1, q, len = 1;

struct segtree {
	struct node {
		vector <ll> num;
		node () {}
		node (ll x) {
			num.resize(len);
			for (ll i = 0; x; i++, x /= k) num[i] = x % k;
		}
		friend node operator + (const node &x, const node &y) {
			node ret; ret.num.resize(len);
			for (ll i = 0; i < len; i++) ret.num[i] = x.num[i] + y.num[i];
			return ret;
		}
		ll conv () {
			ll ret = 0;
			for (ll i = len; i--;) ret = ret * k + num[i];
			return ret;
		}
	} n;
	ll l, r, lz;
	segtree *lt, *rt;
	inline segtree (cl &L = 1, cl &R = N - 2) : l(L), r(R), lz(0) {}

	void build () {
		if (l == r) {
			n = node(a[l]);
			return;
		}
		lt = new segtree (l, mid);
		rt = new segtree (mid + 1, r);
		lt->build();
		rt->build();
		n = lt->n + rt->n;
	}

	inline void push (cl &x) {
		for (ll i = 0; i < len - x; i++) n.num[i] = n.num[i + x];
		for (ll i = len - x; i < len; i++) n.num[i] = 0;
		lz += x;
	}
	inline void shift () { if (lz) { lt->push(lz); rt->push(lz); lz = 0;} }

	void modify (cl &pos, cl &x) {
		if (l == r) {
			n = node(x);
			return;
		}
		shift();
		if (pos <= lt->r) lt->modify(pos, x);
		else rt->modify(pos, x);
		n = lt->n + rt->n;
	}

	void upd (cl &ql, cl &qr) {
		if (r < ql || qr < l)   return;
		if (ql <= l && r <= qr) {
			push(1);
			return;
		}
		shift();
		lt->upd(ql, qr);
		rt->upd(ql, qr);
		n = lt->n + rt->n;
	}

	ll ask (cl &ql, cl &qr) {
		if (r < ql || qr < l)   return 0;
		if (ql <= l && r <= qr) return n.conv();
		shift();
		return lt->ask(ql, qr) + rt->ask(ql, qr);
	}
} seg;

int main ()
{
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

	cin>> n >> q >> k;
	for (ll i = 1; i <= n; i++) cin>> a[i];
	if (k == 1) k = 10, tf = 0;

	for (ll i = 1; i < mod; len++, i *= k);
	seg.r = n; seg.build();

	for (ll t, l, r, x; q--;) {
		cin>> t >> l >> r;
		if (t == 1) seg.modify(l, r);
		else if (t == 3) cout<< seg.ask(l, r) << '\n';
		else if (tf) seg.upd(l, r);
	}

	cerr<< "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";

	return 0;
}
/*
5 10 3
1
2
8
1
3
1 2 5
2 3 5
3 2 5
2 1 4
1 3 2
3 3 5
1 2 4
2 1 2
1 1 4
3 1 5

15 10 3
25
87
32
89
24
99
57
88
10
57
65
42
66
98
13
3 9 12
1 7 15
3 2 9
2 1 14
3 10 13
1 10 6
2 14 14
1 7 96
3 14 15
3 10 12

5 2 1
1
2
3
4
5
1 3 10
3 2 3

*/

Compilation message

sterilizing.cpp: In function 'int main()':
sterilizing.cpp:134:19: warning: unused variable 'x' [-Wunused-variable]
  134 |  for (ll t, l, r, x; q--;) {
      |                   ^
# 결과 실행 시간 메모리 Grader output
1 Runtime error 2 ms 620 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 173 ms 19436 KB Output is correct
2 Correct 144 ms 13676 KB Output is correct
3 Correct 159 ms 29164 KB Output is correct
4 Correct 198 ms 36716 KB Output is correct
5 Correct 250 ms 37356 KB Output is correct
6 Correct 239 ms 37404 KB Output is correct
7 Correct 239 ms 37228 KB Output is correct
8 Correct 237 ms 37376 KB Output is correct
9 Correct 201 ms 37228 KB Output is correct
10 Correct 202 ms 37228 KB Output is correct
11 Correct 201 ms 37228 KB Output is correct
12 Correct 204 ms 37368 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 8 ms 5996 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 66 ms 37868 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -