답안 #39537

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
39537 2018-01-16T09:55:41 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 Update(int lev) {
	tree[lev] = max2(tree[lev * 2], tree[lev * 2 + 1]);
	if (lev > 1) Update(lev / 2);
}
void Push(int x, long long num) {
	tree[nn + x - 1] += num;
	Update((nn + x - 1) / 2);
}
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:32: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:33: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:39: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 9 ms 5956 KB Output is correct
5 Correct 43 ms 5956 KB Output is correct
6 Correct 109 ms 5956 KB Output is correct
7 Correct 109 ms 5956 KB Output is correct
8 Correct 83 ms 5956 KB Output is correct
9 Correct 96 ms 5956 KB Output is correct
10 Correct 159 ms 6088 KB Output is correct
11 Correct 163 ms 6088 KB Output is correct
12 Correct 153 ms 6088 KB Output is correct
13 Correct 156 ms 6088 KB Output is correct
14 Correct 139 ms 6088 KB Output is correct
15 Correct 133 ms 6088 KB Output is correct
16 Correct 93 ms 5956 KB Output is correct
17 Correct 36 ms 5956 KB Output is correct
18 Correct 136 ms 6088 KB Output is correct
19 Correct 166 ms 6088 KB Output is correct
20 Correct 173 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 16 ms 6616 KB Output is correct
10 Correct 9 ms 5956 KB Output is correct
11 Correct 59 ms 5956 KB Output is correct
12 Correct 29 ms 5956 KB Output is correct
13 Correct 69 ms 6616 KB Output is correct
14 Correct 149 ms 9784 KB Output is correct
15 Correct 203 ms 11368 KB Output is correct
16 Correct 213 ms 15328 KB Output is correct
17 Correct 39 ms 5956 KB Output is correct
18 Correct 59 ms 5956 KB Output is correct
19 Correct 119 ms 15328 KB Output is correct
20 Correct 93 ms 15328 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 369 ms 5956 KB Output is correct
2 Correct 2319 ms 6088 KB Output is correct
3 Execution timed out 4000 ms 6484 KB Execution timed out
4 Halted 0 ms 0 KB -