답안 #620726

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
620726 2022-08-03T08:35:18 Z mdn2002 말 (IOI15_horses) C++14
17 / 100
1500 ms 61096 KB
#include "horses.h"

#include<bits/stdc++.h>
using namespace std;
long long n , m , mod = 1e9 + 7 , x [500005] , y [500005] , tree [2000006];
pair < long long , long long > treemx [2000006];
set < int > vall;
void up ( int nod , int l , int r , int x , long long val )
{
    if ( x < l || r < x ) return;
    if ( l == r )
    {
        tree [nod] = val;
        return;
    }
    int mid = ( l + r ) / 2;
    up ( nod * 2 , l , mid , x , val );
    up ( nod * 2 + 1 , mid + 1 , r , x , val );
    tree [nod] = ( tree [ nod * 2 ] * tree [ nod * 2 + 1 ] ) % mod;
}
long long qr ( int nod , int l , int r , int x , int y )
{
    if ( y < l || r < x ) return 1;
    if ( x <= l && r <= y ) return tree [nod];
    int mid = ( l + r ) / 2;
    return ( qr ( nod * 2 , l , mid , x , y ) * qr ( nod * 2 + 1 , mid + 1 , r , x , y ) ) % mod;
}
void upmx ( int nod , int l , int r , int x , long long val )
{
    if ( x < l || r < x ) return;
    if ( l == r )
    {
        treemx [nod] = { val , l };
        return;
    }
    int mid = ( l + r ) / 2;
    upmx ( nod * 2 , l , mid , x , val );
    upmx ( nod * 2 + 1 , mid + 1 , r , x , val );
    treemx [nod] = max ( treemx [ nod * 2 ] , treemx [ nod * 2 + 1 ] );
}
pair < long long , long long > qrmx ( int nod , int l , int r , int x , int y )
{
    if ( y < l || r < x ) return { -1 , -1 };
    if ( x <= l && r <= y ) return treemx [nod];
    int mid = ( l + r ) / 2;
    return max ( qrmx ( nod * 2 , l , mid , x , y ) , qrmx ( nod * 2 + 1 , mid + 1 , r , x , y ) );
}
long long get ( )
{
    vector < int > ids , nig;

    ids . push_back ( n );

    if ( vall . size () )
    {
        set < int > :: iterator it = -- vall . end ();
        for ( it ; it != vall . begin () ; it -- )
        {
            ids . push_back ( * it );
            if ( ids . size () >= 50 ) break;
        }
    }
    if ( ids [ ids . size () - 1 ] != 0 ) ids . push_back ( 0 );

    reverse ( ids . begin () , ids . end () );

    for ( int i = 0 ; i < ids . size () ; i ++ )
    {
        if ( i )
        {
            int id = qrmx ( 1 , 0 , n , ids [ i - 1 ] + 1 , ids [i] - 1 ) . second;
            if ( id != -1 ) nig . push_back ( id );
        }
        if ( i != ids . size () - 1 ) nig . push_back ( ids [i] );
    }

    long long bst = 0 , mul = 1;
    for ( int i = 1 ; i < nig . size () ; i ++ )
    {
        int id = nig [i];
        mul *= x [id];
        if ( mul > y [bst] )
        {
            mul = 1;
            bst = id;
            continue;
        }
        long long almul = mul * y [id];
        if ( almul > y [bst] )
        {
            mul = 1;
            bst = id;
        }
    }

    long long bstt = 0 , mull = 1;
    for ( int i = 1 ; i < n ; i ++ )
    {
        mull *= x [i];
        if ( mull > y [bst] )
        {
            mull = 1;
            bstt = i;
            continue;
        }
        long long almul = mull * y [i];
        if ( almul > y [bst] )
        {
            mull = 1;
            bstt = i;
        }
    }
    if ( bst != bstt )
    {
        int arra [50000000];
    }
    long long ans = qr ( 1 , 0 , n , 0 , bst );
    ans = ( ans * y [bst] ) % mod;
    return ans;
}

int init(int N, int X[], int Y[]) {

	n = N;
    for ( int i = 0 ; i < n ; i ++ )
    {
        x [i] = X [i];
        if ( x [i] > 1 ) vall . insert ( i );
        up ( 1 , 0 , n , i , x [i] );
    }
    for ( int i = 0 ; i < n ; i ++ )
    {
        y [i] = Y [i];
        upmx ( 1 , 0 , n , i , y [i] );
    }
    return get ();

}

int updateX(int pos, int val) {

	if ( x [pos] > 1 ) vall . erase ( vall . lower_bound ( pos ) );
    x [pos] = val;
    if ( x [pos] > 1 ) vall . insert ( pos );
    up ( 1 , 0 , n , pos , x [pos] );
	return get ();

}

int updateY(int pos, int val) {

	y [pos] = val;
    upmx ( 1 , 0 , n , pos , val );
	return get ();

}





Compilation message

horses.cpp: In function 'void up(int, int, int, int, long long int)':
horses.cpp:8:41: warning: declaration of 'x' shadows a global declaration [-Wshadow]
    8 | void up ( int nod , int l , int r , int x , long long val )
      |                                     ~~~~^
horses.cpp:5:35: note: shadowed declaration is here
    5 | long long n , m , mod = 1e9 + 7 , x [500005] , y [500005] , tree [2000006];
      |                                   ^
horses.cpp: In function 'long long int qr(int, int, int, int, int)':
horses.cpp:21:54: warning: declaration of 'y' shadows a global declaration [-Wshadow]
   21 | long long qr ( int nod , int l , int r , int x , int y )
      |                                                  ~~~~^
horses.cpp:5:48: note: shadowed declaration is here
    5 | long long n , m , mod = 1e9 + 7 , x [500005] , y [500005] , tree [2000006];
      |                                                ^
horses.cpp:21:46: warning: declaration of 'x' shadows a global declaration [-Wshadow]
   21 | long long qr ( int nod , int l , int r , int x , int y )
      |                                          ~~~~^
horses.cpp:5:35: note: shadowed declaration is here
    5 | long long n , m , mod = 1e9 + 7 , x [500005] , y [500005] , tree [2000006];
      |                                   ^
horses.cpp: In function 'void upmx(int, int, int, int, long long int)':
horses.cpp:28:43: warning: declaration of 'x' shadows a global declaration [-Wshadow]
   28 | void upmx ( int nod , int l , int r , int x , long long val )
      |                                       ~~~~^
horses.cpp:5:35: note: shadowed declaration is here
    5 | long long n , m , mod = 1e9 + 7 , x [500005] , y [500005] , tree [2000006];
      |                                   ^
horses.cpp: In function 'std::pair<long long int, long long int> qrmx(int, int, int, int, int)':
horses.cpp:41:77: warning: declaration of 'y' shadows a global declaration [-Wshadow]
   41 | pair < long long , long long > qrmx ( int nod , int l , int r , int x , int y )
      |                                                                         ~~~~^
horses.cpp:5:48: note: shadowed declaration is here
    5 | long long n , m , mod = 1e9 + 7 , x [500005] , y [500005] , tree [2000006];
      |                                                ^
horses.cpp:41:69: warning: declaration of 'x' shadows a global declaration [-Wshadow]
   41 | pair < long long , long long > qrmx ( int nod , int l , int r , int x , int y )
      |                                                                 ~~~~^
horses.cpp:5:35: note: shadowed declaration is here
    5 | long long n , m , mod = 1e9 + 7 , x [500005] , y [500005] , tree [2000006];
      |                                   ^
horses.cpp: In function 'long long int get()':
horses.cpp:52:23: warning: conversion from 'long long int' to 'std::vector<int>::value_type' {aka 'int'} may change value [-Wconversion]
   52 |     ids . push_back ( n );
      |                       ^
horses.cpp:57:15: warning: statement has no effect [-Wunused-value]
   57 |         for ( it ; it != vall . begin () ; it -- )
      |               ^~
horses.cpp:67:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |     for ( int i = 0 ; i < ids . size () ; i ++ )
      |                       ~~^~~~~~~~~~~~~~~
horses.cpp:71:37: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   71 |             int id = qrmx ( 1 , 0 , n , ids [ i - 1 ] + 1 , ids [i] - 1 ) . second;
      |                                     ^
horses.cpp:71:77: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   71 |             int id = qrmx ( 1 , 0 , n , ids [ i - 1 ] + 1 , ids [i] - 1 ) . second;
      |                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
horses.cpp:74:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   74 |         if ( i != ids . size () - 1 ) nig . push_back ( ids [i] );
      |              ~~^~~~~~~~~~~~~~~~~~~~
horses.cpp:78:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |     for ( int i = 1 ; i < nig . size () ; i ++ )
      |                       ~~^~~~~~~~~~~~~~~
horses.cpp:115:13: warning: unused variable 'arra' [-Wunused-variable]
  115 |         int arra [50000000];
      |             ^~~~
horses.cpp:117:34: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  117 |     long long ans = qr ( 1 , 0 , n , 0 , bst );
      |                                  ^
horses.cpp:117:42: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  117 |     long long ans = qr ( 1 , 0 , n , 0 , bst );
      |                                          ^~~
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:129:22: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  129 |         up ( 1 , 0 , n , i , x [i] );
      |                      ^
horses.cpp:134:24: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  134 |         upmx ( 1 , 0 , n , i , y [i] );
      |                        ^
horses.cpp:136:16: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  136 |     return get ();
      |            ~~~~^~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:145:18: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  145 |     up ( 1 , 0 , n , pos , x [pos] );
      |                  ^
horses.cpp:146:13: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  146 |  return get ();
      |         ~~~~^~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:153:20: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  153 |     upmx ( 1 , 0 , n , pos , val );
      |                    ^
horses.cpp:154:13: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  154 |  return get ();
      |         ~~~~^~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 1 ms 384 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 260 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 212 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 0 ms 212 KB Output is correct
22 Correct 0 ms 244 KB Output is correct
23 Correct 8 ms 340 KB Output is correct
24 Correct 7 ms 340 KB Output is correct
25 Correct 6 ms 464 KB Output is correct
26 Correct 6 ms 400 KB Output is correct
27 Incorrect 8 ms 340 KB Output isn't correct
28 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1273 ms 61096 KB Output is correct
2 Execution timed out 1554 ms 61072 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 0 ms 212 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 7 ms 420 KB Output is correct
24 Correct 5 ms 340 KB Output is correct
25 Correct 6 ms 340 KB Output is correct
26 Correct 6 ms 340 KB Output is correct
27 Incorrect 9 ms 340 KB Output isn't correct
28 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 260 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 1 ms 212 KB Output is correct
23 Correct 8 ms 340 KB Output is correct
24 Correct 8 ms 340 KB Output is correct
25 Correct 6 ms 340 KB Output is correct
26 Correct 6 ms 340 KB Output is correct
27 Incorrect 8 ms 340 KB Output isn't correct
28 Halted 0 ms 0 KB -