답안 #39538

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
39538 2018-01-16T09:58:53 Z 14kg 역사적 조사 (JOI14_historical) C++11
40 / 100
4000 ms 15328 KB
#include <stdio.h>
#include <algorithm>
#include <set>
#include <map>
#define N 100001
#define NN 262144
#define SQ 300
#define max2(x,y) (x>y?x:y)

using namespace std;
typedef pair<pair<int, int>, int> ppi;
int n, q_len, M_len, nn, in[N], Md[N];
long long tree[NN], out[N];
ppi Q[N];
set<int> S;
map<int, int> M;

bool cmp(ppi x, ppi y) {
	pair<int,int> tx = { x.first.first / SQ,x.first.second / SQ };
	pair<int,int> ty = { y.first.first / SQ,y.first.second / SQ };
	return x < y;
}
void Push(int x, long long num) {
	tree[nn + x - 1] += num;
	for (int lev = (nn + x - 1) / 2; lev; lev /= 2) {
		tree[lev] = max2(tree[lev * 2], tree[lev * 2 + 1]);
	}
}
int main() {
	scanf("%d %d", &n, &q_len);
	for (int i = 1; i <= n; i++) scanf("%d", &in[i]), S.insert(in[i]);
	for (auto i : S) M[i] = ++M_len;
	for (int i = 1; i <= n; i++) Md[i] = M[in[i]];

	for (nn = 1; nn < M_len; nn *= 2);
	for (int i = 1; i <= q_len; i++) {
		scanf("%d %d", &Q[i].first.first, &Q[i].first.second);
		Q[i].second = i;
	}
	sort(Q + 1, Q + q_len + 1, cmp);
	
	int l = 1, r = 0;
	for (int i = 1; i <= q_len; i++) {
		int x = Q[i].first.first, y = Q[i].first.second;
		while (r < y) Push(Md[r + 1], in[r + 1]), r++;
		while (l > x) Push(Md[l - 1], in[l - 1]), l--;
		while (r > y) Push(Md[r], -in[r]), r--;
		while (l < x) Push(Md[l], -in[l]), l++;
		out[Q[i].second] = tree[1];
	}
	for (int i = 1; i <= q_len; i++) printf("%lld\n", out[i]);
}

Compilation message

historic.cpp: In function 'bool cmp(ppi, ppi)':
historic.cpp:19:16: warning: variable 'tx' set but not used [-Wunused-but-set-variable]
  pair<int,int> tx = { x.first.first / SQ,x.first.second / SQ };
                ^
historic.cpp:20:16: warning: variable 'ty' set but not used [-Wunused-but-set-variable]
  pair<int,int> ty = { y.first.first / SQ,y.first.second / SQ };
                ^
historic.cpp: In function 'int main()':
historic.cpp:30:28: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &q_len);
                            ^
historic.cpp:31:67: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for (int i = 1; i <= n; i++) scanf("%d", &in[i]), S.insert(in[i]);
                                                                   ^
historic.cpp:37:56: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &Q[i].first.first, &Q[i].first.second);
                                                        ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 5956 KB Output is correct
2 Correct 0 ms 5956 KB Output is correct
3 Correct 0 ms 5956 KB Output is correct
4 Correct 0 ms 5956 KB Output is correct
5 Correct 0 ms 5956 KB Output is correct
6 Correct 0 ms 5956 KB Output is correct
7 Correct 0 ms 5956 KB Output is correct
8 Correct 0 ms 5956 KB Output is correct
9 Correct 0 ms 5956 KB Output is correct
10 Correct 0 ms 5956 KB Output is correct
11 Correct 0 ms 5956 KB Output is correct
12 Correct 0 ms 5956 KB Output is correct
13 Correct 0 ms 5956 KB Output is correct
14 Correct 0 ms 5956 KB Output is correct
15 Correct 0 ms 5956 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 5956 KB Output is correct
2 Correct 0 ms 5956 KB Output is correct
3 Correct 3 ms 5956 KB Output is correct
4 Correct 13 ms 5956 KB Output is correct
5 Correct 56 ms 5956 KB Output is correct
6 Correct 119 ms 5956 KB Output is correct
7 Correct 116 ms 5956 KB Output is correct
8 Correct 99 ms 5956 KB Output is correct
9 Correct 93 ms 5956 KB Output is correct
10 Correct 169 ms 6088 KB Output is correct
11 Correct 163 ms 6088 KB Output is correct
12 Correct 166 ms 6088 KB Output is correct
13 Correct 169 ms 6088 KB Output is correct
14 Correct 159 ms 6088 KB Output is correct
15 Correct 153 ms 6088 KB Output is correct
16 Correct 109 ms 5956 KB Output is correct
17 Correct 39 ms 5956 KB Output is correct
18 Correct 156 ms 6088 KB Output is correct
19 Correct 173 ms 6088 KB Output is correct
20 Correct 179 ms 6220 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 5956 KB Output is correct
2 Correct 0 ms 5956 KB Output is correct
3 Correct 0 ms 5956 KB Output is correct
4 Correct 0 ms 5956 KB Output is correct
5 Correct 0 ms 6088 KB Output is correct
6 Correct 0 ms 5956 KB Output is correct
7 Correct 3 ms 6088 KB Output is correct
8 Correct 6 ms 6220 KB Output is correct
9 Correct 23 ms 6616 KB Output is correct
10 Correct 6 ms 5956 KB Output is correct
11 Correct 66 ms 5956 KB Output is correct
12 Correct 39 ms 5956 KB Output is correct
13 Correct 69 ms 6616 KB Output is correct
14 Correct 156 ms 9784 KB Output is correct
15 Correct 219 ms 11368 KB Output is correct
16 Correct 209 ms 15328 KB Output is correct
17 Correct 33 ms 5956 KB Output is correct
18 Correct 56 ms 5956 KB Output is correct
19 Correct 139 ms 15328 KB Output is correct
20 Correct 103 ms 15328 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 453 ms 5956 KB Output is correct
2 Correct 2613 ms 6088 KB Output is correct
3 Execution timed out 4000 ms 6484 KB Execution timed out
4 Halted 0 ms 0 KB -