Submission #199539

# Submission time Handle Problem Language Result Execution time Memory
199539 2020-02-02T02:12:28 Z arnold518 역사적 조사 (JOI14_historical) C++14
40 / 100
4000 ms 6256 KB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

const int MAXN = 1e5;
const int SQ = 700;

int N, Q, A[MAXN+10], B[MAXN+10], S;
vector<int> comp;

struct Query
{
	int l, r, p;
	bool operator < (const Query &p)
	{
		if(l/SQ==p.l/SQ) return r<p.r;
		return l/SQ<p.l/SQ;
	}
};

Query query[MAXN+10];

ll tree[MAXN*4+10], ans[MAXN+10];
void update(int node, int tl, int tr, int pos, ll val)
{
	while(tl!=tr)
	{
		int mid=tl+tr>>1;
		if(pos<=mid) node=node*2, tr=mid;
		else node=node*2+1, tl=mid+1;
	}
	tree[node]+=val;
	while(node!=1)
	{
		node/=2;
		tree[node]=max(tree[node*2], tree[node*2+1]);
	}
}
ll qquery() { return tree[1]; }

void push(int x) { update(1, 1, S, B[x], A[x]); }
void pop(int x) { update(1, 1, S, B[x], -A[x]); }

int main()
{
	int i, j;

	scanf("%d%d", &N, &Q);
	for(i=1; i<=N; i++) scanf("%d", &A[i]), comp.push_back(A[i]);
	sort(comp.begin(), comp.end());
	comp.erase(unique(comp.begin(), comp.end()), comp.end()); S=comp.size();
	for(i=1; i<=N; i++) B[i]=lower_bound(comp.begin(), comp.end(), A[i])-comp.begin()+1;
	for(i=1; i<=Q; i++) scanf("%d%d", &query[i].l, &query[i].r), query[i].p=i;
	sort(query+1, query+Q+1);

	int l=1, r=1; push(1);
	for(i=1; i<=Q; i++)
	{
		while(r<query[i].r) r++, push(r);
		while(l>query[i].l) l--, push(l);
		while(r>query[i].r) pop(r), r--;
		while(l<query[i].l) pop(l), l++;
		ans[query[i].p]=qquery();
	}
	for(i=1; i<=Q; i++) printf("%lld\n", ans[i]);
}

Compilation message

historic.cpp: In function 'void update(int, int, int, int, ll)':
historic.cpp:31:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   int mid=tl+tr>>1;
           ~~^~~
historic.cpp: In function 'int main()':
historic.cpp:49:9: warning: unused variable 'j' [-Wunused-variable]
  int i, j;
         ^
historic.cpp:51:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &N, &Q);
  ~~~~~^~~~~~~~~~~~~~~~
historic.cpp:52:40: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(i=1; i<=N; i++) scanf("%d", &A[i]), comp.push_back(A[i]);
                      ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
historic.cpp:56:61: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(i=1; i<=Q; i++) scanf("%d%d", &query[i].l, &query[i].r), query[i].p=i;
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 5 ms 376 KB Output is correct
2 Correct 5 ms 380 KB Output is correct
3 Correct 5 ms 376 KB Output is correct
4 Correct 5 ms 376 KB Output is correct
5 Correct 5 ms 376 KB Output is correct
6 Correct 5 ms 376 KB Output is correct
7 Correct 5 ms 376 KB Output is correct
8 Correct 5 ms 376 KB Output is correct
9 Correct 5 ms 376 KB Output is correct
10 Correct 5 ms 376 KB Output is correct
11 Correct 5 ms 376 KB Output is correct
12 Correct 5 ms 376 KB Output is correct
13 Correct 5 ms 376 KB Output is correct
14 Correct 5 ms 376 KB Output is correct
15 Correct 5 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 376 KB Output is correct
2 Correct 7 ms 376 KB Output is correct
3 Correct 13 ms 376 KB Output is correct
4 Correct 21 ms 376 KB Output is correct
5 Correct 47 ms 516 KB Output is correct
6 Correct 56 ms 504 KB Output is correct
7 Correct 65 ms 632 KB Output is correct
8 Correct 45 ms 504 KB Output is correct
9 Correct 46 ms 504 KB Output is correct
10 Correct 89 ms 648 KB Output is correct
11 Correct 88 ms 616 KB Output is correct
12 Correct 86 ms 632 KB Output is correct
13 Correct 85 ms 616 KB Output is correct
14 Correct 80 ms 632 KB Output is correct
15 Correct 82 ms 632 KB Output is correct
16 Correct 48 ms 636 KB Output is correct
17 Correct 22 ms 632 KB Output is correct
18 Correct 82 ms 632 KB Output is correct
19 Correct 91 ms 632 KB Output is correct
20 Correct 92 ms 632 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 380 KB Output is correct
2 Correct 5 ms 376 KB Output is correct
3 Correct 5 ms 376 KB Output is correct
4 Correct 6 ms 376 KB Output is correct
5 Correct 6 ms 376 KB Output is correct
6 Correct 6 ms 376 KB Output is correct
7 Correct 9 ms 504 KB Output is correct
8 Correct 12 ms 632 KB Output is correct
9 Correct 20 ms 1016 KB Output is correct
10 Correct 14 ms 1120 KB Output is correct
11 Correct 77 ms 3956 KB Output is correct
12 Correct 46 ms 1644 KB Output is correct
13 Correct 71 ms 2288 KB Output is correct
14 Correct 104 ms 4216 KB Output is correct
15 Correct 132 ms 5616 KB Output is correct
16 Correct 93 ms 5128 KB Output is correct
17 Correct 46 ms 2356 KB Output is correct
18 Correct 71 ms 3936 KB Output is correct
19 Correct 78 ms 5996 KB Output is correct
20 Correct 47 ms 4204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 104 ms 760 KB Output is correct
2 Correct 341 ms 1272 KB Output is correct
3 Correct 704 ms 1784 KB Output is correct
4 Correct 1144 ms 2324 KB Output is correct
5 Correct 1517 ms 2804 KB Output is correct
6 Correct 1704 ms 3184 KB Output is correct
7 Correct 1546 ms 3580 KB Output is correct
8 Correct 1064 ms 4080 KB Output is correct
9 Correct 765 ms 4592 KB Output is correct
10 Correct 280 ms 4664 KB Output is correct
11 Correct 1012 ms 4720 KB Output is correct
12 Correct 2422 ms 4672 KB Output is correct
13 Correct 3740 ms 4792 KB Output is correct
14 Execution timed out 4059 ms 6256 KB Time limit exceeded
15 Halted 0 ms 0 KB -