Submission #62306

# Submission time Handle Problem Language Result Execution time Memory
62306 2018-07-28T04:21:25 Z tugushka Horses (IOI15_horses) C++14
100 / 100
552 ms 280552 KB
#include "horses.h"
#include<bits/stdc++.h>
using namespace std;

#define mod 1000000007
#define L(x) ((x)<<1)
#define R(x) (((x)<<1)|1)

struct Node{
	double sumx, y, max_val;
	int res, modx, xx, yy;
	
	void print(){
		cerr << "DBG : \n";
		cerr << sumx << ' ' << max_val << endl;
		cerr << res << endl;
	}
} tree[1<<21];

int n;

void update(int l, int r, int x, int pos, int dx, int dy){
	if( r < pos || pos < l) return;
	if( l == pos && l == r ){
		if( dx ) tree[x].sumx = log(dx), tree[x].xx = dx;
		if( dy ) tree[x].y = log(dy), tree[x].yy = dy;
		tree[x].max_val = tree[x].sumx + tree[x].y;
		tree[x].res = 1LL * tree[x].xx * tree[x].yy % mod;
		tree[x].modx = 1LL * tree[x].xx % mod;
		return;
	}
	
	int mid = (l+r)>>1;
	update( l, mid, L(x), pos, dx, dy );
	update( mid+1, r, R(x), pos, dx, dy );
	
	tree[x].sumx = tree[L(x)].sumx + tree[R(x)].sumx;
	tree[x].modx = 1LL * tree[L(x)].modx * tree[R(x)].modx % mod;
	if( tree[L(x)].max_val < tree[R(x)].max_val + tree[L(x)].sumx ){
		tree[x].max_val = tree[R(x)].max_val + tree[L(x)].sumx;
		tree[x].res = 1LL * tree[R(x)].res * tree[L(x)].modx % mod;
	}
	else{
		tree[x].max_val = tree[L(x)].max_val;
		tree[x].res = tree[L(x)].res;
	}
	
//	cerr << l << ' ' << r << ' ' << x << endl;
//	tree[x].print();
	
	return;
}

int init(int N, int X[], int Y[]) {
	n = N;
//	cerr << n << endl;
	for(int i = 0 ; i < n ; i++){
		update( 0, n-1, 1, i, X[i], Y[i] );
	}
//	cerr << "Done\n";
	return tree[1].res;
}

int updateX(int pos, int val) {	
	update(0, n-1, 1, pos, val, 0);
	return tree[1].res;
}

int updateY(int pos, int val) {
	update(0, n-1, 1, pos, 0, val);
	return tree[1].res;
}

Compilation message

horses.cpp: In function 'void update(int, int, int, int, int, int)':
horses.cpp:28:47: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
   tree[x].res = 1LL * tree[x].xx * tree[x].yy % mod;
                                               ^
horses.cpp:29:35: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
   tree[x].modx = 1LL * tree[x].xx % mod;
                                   ^
horses.cpp:38:57: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  tree[x].modx = 1LL * tree[L(x)].modx * tree[R(x)].modx % mod;
                                                         ^
horses.cpp:41:56: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
   tree[x].res = 1LL * tree[R(x)].res * tree[L(x)].modx % mod;
                                                        ^
# Verdict Execution time Memory Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 3 ms 472 KB Output is correct
3 Correct 3 ms 624 KB Output is correct
4 Correct 2 ms 624 KB Output is correct
5 Correct 3 ms 624 KB Output is correct
6 Correct 2 ms 624 KB Output is correct
7 Correct 3 ms 624 KB Output is correct
8 Correct 2 ms 624 KB Output is correct
9 Correct 3 ms 624 KB Output is correct
10 Correct 2 ms 624 KB Output is correct
11 Correct 2 ms 624 KB Output is correct
12 Correct 3 ms 624 KB Output is correct
13 Correct 3 ms 624 KB Output is correct
14 Correct 3 ms 624 KB Output is correct
15 Correct 2 ms 624 KB Output is correct
16 Correct 2 ms 624 KB Output is correct
17 Correct 2 ms 624 KB Output is correct
18 Correct 2 ms 624 KB Output is correct
19 Correct 4 ms 624 KB Output is correct
20 Correct 2 ms 624 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 624 KB Output is correct
2 Correct 3 ms 624 KB Output is correct
3 Correct 3 ms 624 KB Output is correct
4 Correct 4 ms 624 KB Output is correct
5 Correct 3 ms 624 KB Output is correct
6 Correct 2 ms 624 KB Output is correct
7 Correct 2 ms 624 KB Output is correct
8 Correct 3 ms 624 KB Output is correct
9 Correct 2 ms 624 KB Output is correct
10 Correct 3 ms 624 KB Output is correct
11 Correct 2 ms 624 KB Output is correct
12 Correct 3 ms 624 KB Output is correct
13 Correct 2 ms 624 KB Output is correct
14 Correct 3 ms 624 KB Output is correct
15 Correct 3 ms 624 KB Output is correct
16 Correct 2 ms 624 KB Output is correct
17 Correct 2 ms 632 KB Output is correct
18 Correct 2 ms 632 KB Output is correct
19 Correct 3 ms 632 KB Output is correct
20 Correct 2 ms 632 KB Output is correct
21 Correct 2 ms 632 KB Output is correct
22 Correct 3 ms 632 KB Output is correct
23 Correct 4 ms 632 KB Output is correct
24 Correct 4 ms 660 KB Output is correct
25 Correct 5 ms 696 KB Output is correct
26 Correct 4 ms 856 KB Output is correct
27 Correct 4 ms 892 KB Output is correct
28 Correct 3 ms 892 KB Output is correct
29 Correct 4 ms 892 KB Output is correct
30 Correct 4 ms 944 KB Output is correct
31 Correct 4 ms 944 KB Output is correct
32 Correct 4 ms 1012 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 307 ms 46836 KB Output is correct
2 Correct 454 ms 59668 KB Output is correct
3 Correct 389 ms 63456 KB Output is correct
4 Correct 382 ms 71088 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 71088 KB Output is correct
2 Correct 3 ms 71088 KB Output is correct
3 Correct 2 ms 71088 KB Output is correct
4 Correct 3 ms 71088 KB Output is correct
5 Correct 3 ms 71088 KB Output is correct
6 Correct 3 ms 71088 KB Output is correct
7 Correct 3 ms 71088 KB Output is correct
8 Correct 3 ms 71088 KB Output is correct
9 Correct 3 ms 71088 KB Output is correct
10 Correct 2 ms 71088 KB Output is correct
11 Correct 3 ms 71088 KB Output is correct
12 Correct 3 ms 71088 KB Output is correct
13 Correct 4 ms 71088 KB Output is correct
14 Correct 3 ms 71088 KB Output is correct
15 Correct 3 ms 71088 KB Output is correct
16 Correct 3 ms 71088 KB Output is correct
17 Correct 3 ms 71088 KB Output is correct
18 Correct 3 ms 71088 KB Output is correct
19 Correct 3 ms 71088 KB Output is correct
20 Correct 4 ms 71088 KB Output is correct
21 Correct 3 ms 71088 KB Output is correct
22 Correct 2 ms 71088 KB Output is correct
23 Correct 5 ms 71088 KB Output is correct
24 Correct 5 ms 71088 KB Output is correct
25 Correct 5 ms 71088 KB Output is correct
26 Correct 3 ms 71088 KB Output is correct
27 Correct 5 ms 71088 KB Output is correct
28 Correct 4 ms 71088 KB Output is correct
29 Correct 4 ms 71088 KB Output is correct
30 Correct 5 ms 71088 KB Output is correct
31 Correct 5 ms 71088 KB Output is correct
32 Correct 4 ms 71088 KB Output is correct
33 Correct 374 ms 74348 KB Output is correct
34 Correct 381 ms 78272 KB Output is correct
35 Correct 352 ms 89124 KB Output is correct
36 Correct 419 ms 100120 KB Output is correct
37 Correct 302 ms 102140 KB Output is correct
38 Correct 361 ms 104992 KB Output is correct
39 Correct 295 ms 106996 KB Output is correct
40 Correct 331 ms 113024 KB Output is correct
41 Correct 268 ms 115180 KB Output is correct
42 Correct 292 ms 117188 KB Output is correct
43 Correct 286 ms 123588 KB Output is correct
44 Correct 325 ms 130000 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 130000 KB Output is correct
2 Correct 3 ms 130000 KB Output is correct
3 Correct 3 ms 130000 KB Output is correct
4 Correct 3 ms 130000 KB Output is correct
5 Correct 2 ms 130000 KB Output is correct
6 Correct 2 ms 130000 KB Output is correct
7 Correct 3 ms 130000 KB Output is correct
8 Correct 3 ms 130000 KB Output is correct
9 Correct 3 ms 130000 KB Output is correct
10 Correct 3 ms 130000 KB Output is correct
11 Correct 2 ms 130000 KB Output is correct
12 Correct 3 ms 130000 KB Output is correct
13 Correct 3 ms 130000 KB Output is correct
14 Correct 3 ms 130000 KB Output is correct
15 Correct 2 ms 130000 KB Output is correct
16 Correct 3 ms 130000 KB Output is correct
17 Correct 3 ms 130000 KB Output is correct
18 Correct 3 ms 130000 KB Output is correct
19 Correct 3 ms 130000 KB Output is correct
20 Correct 2 ms 130000 KB Output is correct
21 Correct 3 ms 130000 KB Output is correct
22 Correct 4 ms 130000 KB Output is correct
23 Correct 4 ms 130000 KB Output is correct
24 Correct 4 ms 130000 KB Output is correct
25 Correct 5 ms 130000 KB Output is correct
26 Correct 6 ms 130000 KB Output is correct
27 Correct 4 ms 130000 KB Output is correct
28 Correct 5 ms 130000 KB Output is correct
29 Correct 4 ms 130000 KB Output is correct
30 Correct 5 ms 130000 KB Output is correct
31 Correct 4 ms 130000 KB Output is correct
32 Correct 5 ms 130000 KB Output is correct
33 Correct 417 ms 135020 KB Output is correct
34 Correct 492 ms 147416 KB Output is correct
35 Correct 463 ms 151184 KB Output is correct
36 Correct 552 ms 158932 KB Output is correct
37 Correct 378 ms 161968 KB Output is correct
38 Correct 367 ms 165816 KB Output is correct
39 Correct 364 ms 176708 KB Output is correct
40 Correct 387 ms 187612 KB Output is correct
41 Correct 301 ms 189588 KB Output is correct
42 Correct 337 ms 192804 KB Output is correct
43 Correct 272 ms 194724 KB Output is correct
44 Correct 334 ms 200780 KB Output is correct
45 Correct 306 ms 202844 KB Output is correct
46 Correct 290 ms 204848 KB Output is correct
47 Correct 319 ms 211080 KB Output is correct
48 Correct 310 ms 217468 KB Output is correct
49 Correct 462 ms 223556 KB Output is correct
50 Correct 476 ms 228572 KB Output is correct
51 Correct 445 ms 240432 KB Output is correct
52 Correct 480 ms 251836 KB Output is correct
53 Correct 423 ms 255236 KB Output is correct
54 Correct 391 ms 258988 KB Output is correct
55 Correct 349 ms 261452 KB Output is correct
56 Correct 368 ms 269040 KB Output is correct
57 Correct 333 ms 271744 KB Output is correct
58 Correct 328 ms 274996 KB Output is correct
59 Correct 345 ms 280552 KB Output is correct