답안 #25518

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
25518 2017-06-22T15:04:13 Z youngyojun Sterilizing Spray (JOI15_sterilizing) C++11
100 / 100
2236 ms 10172 KB
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <deque>
#include <queue>
#include <set>
#include <map>
#include <unordered_map>
#include <bitset>
#include <string>
#define rf(x) (x)=0;while(*p<48)p++;while(47<*p)(x)=((x)<<3)+((x)<<1)+(*p++&15);
#define pb push_back
#define sz(V) ((int)(V).size())
#define allv(V) ((V).begin()),((V).end())
#define befv(V) ((V)[(sz(V)-2)])
#define sorv(V) sort(allv(V))
#define revv(V) reverse(allv(V))
#define univ(V) (V).erase(unique(allv(V)),(V).end())
#define clv(V) (V).clear()
#define upmin(a,b) (a)=min((a),(b))
#define upmax(a,b) (a)=max((a),(b))
#define rb(x) ((x)&(-(x)))
#define INF (1100000099)
#define INFLL (1100000000000000099ll)
#define MAXN (100005)
#define MAXQ (100005)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<int, ll> pil;
typedef pair<ll, int> pli;
static unsigned char str[3355555], *p=str;
const int MX = 131072;
struct SEG {
	pii d[MX*2]; ll ds[MX*2];
	void upd(int x, int r) {
		for(d[x+MX] = {r, x}, x += MX, ds[x] = r, x /= 2; x; x /= 2) {
			d[x] = max(d[x*2], d[x*2+1]); ds[x] = ds[x*2] + ds[x*2+1];
		}
	}
	pii getmax(int s, int e) {
		pii r = {0, 0}; for(s += MX, e += MX; s <= e; s /= 2, e /= 2) {
			if(s&1) upmax(r, d[s++]); if(~e&1) upmax(r, d[e--]);
		} return r;
	}
	ll getsum(int s, int e) {
		ll r = 0; for(s += MX, e += MX; s <= e; s /= 2, e /= 2) {
			if(s&1) r += ds[s++]; if(~e&1) r += ds[e--];
		} return r;
	}
};

SEG seg;
pii V[MAXN]; int Vn;
int N, Q, K;

int main() {
	fread(str, 1, 3355555, stdin);
	rf(N) rf(Q) rf(K)
	for(int i = 1, c; i <= N; i++) { rf(c) seg.upd(i, c); }
	for(int type, s, e; Q--;) {
		rf(type) rf(s) rf(e)
		if(1 == type) seg.upd(s, e);
		else if(2 == type) {
			if(1 == K) continue;
			Vn = 0; for(pii r;;) {
				r = seg.getmax(s, e);
				if(!r.first) break;
				V[Vn++] = r; seg.upd(r.second, 0);
			}
			for(int i = 0; i < Vn; i++) seg.upd(V[i].second, V[i].first/K);
		}
		else printf("%lld\n", seg.getsum(s, e));
	}
	return 0;
}

Compilation message

sterilizing.cpp: In function 'int main()':
sterilizing.cpp:65:31: warning: ignoring return value of 'size_t fread(void*, size_t, size_t, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
  fread(str, 1, 3355555, stdin);
                               ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 10172 KB Output is correct
2 Correct 0 ms 10172 KB Output is correct
3 Correct 6 ms 10172 KB Output is correct
4 Correct 19 ms 10172 KB Output is correct
5 Correct 23 ms 10172 KB Output is correct
6 Correct 13 ms 10172 KB Output is correct
7 Correct 16 ms 10172 KB Output is correct
8 Correct 19 ms 10172 KB Output is correct
9 Correct 23 ms 10172 KB Output is correct
10 Correct 16 ms 10172 KB Output is correct
11 Correct 13 ms 10172 KB Output is correct
12 Correct 16 ms 10172 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 10172 KB Output is correct
2 Correct 23 ms 10172 KB Output is correct
3 Correct 9 ms 10172 KB Output is correct
4 Correct 29 ms 10172 KB Output is correct
5 Correct 46 ms 10172 KB Output is correct
6 Correct 43 ms 10172 KB Output is correct
7 Correct 36 ms 10172 KB Output is correct
8 Correct 33 ms 10172 KB Output is correct
9 Correct 36 ms 10172 KB Output is correct
10 Correct 46 ms 10172 KB Output is correct
11 Correct 29 ms 10172 KB Output is correct
12 Correct 39 ms 10172 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 10172 KB Output is correct
2 Correct 16 ms 10172 KB Output is correct
3 Correct 26 ms 10172 KB Output is correct
4 Correct 33 ms 10172 KB Output is correct
5 Correct 79 ms 10172 KB Output is correct
6 Correct 59 ms 10172 KB Output is correct
7 Correct 33 ms 10172 KB Output is correct
8 Correct 66 ms 10172 KB Output is correct
9 Correct 63 ms 10172 KB Output is correct
10 Correct 66 ms 10172 KB Output is correct
11 Correct 63 ms 10172 KB Output is correct
12 Correct 83 ms 10172 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 369 ms 10172 KB Output is correct
2 Correct 349 ms 10172 KB Output is correct
3 Correct 743 ms 10172 KB Output is correct
4 Correct 446 ms 10172 KB Output is correct
5 Correct 646 ms 10172 KB Output is correct
6 Correct 836 ms 10172 KB Output is correct
7 Correct 613 ms 10172 KB Output is correct
8 Correct 1226 ms 10172 KB Output is correct
9 Correct 1126 ms 10172 KB Output is correct
10 Correct 1486 ms 10172 KB Output is correct
11 Correct 823 ms 10172 KB Output is correct
12 Correct 2236 ms 10172 KB Output is correct