Submission #1018091

# Submission time Handle Problem Language Result Execution time Memory
1018091 2024-07-09T14:08:19 Z magikarp23 Horses (IOI15_horses) C++17
17 / 100
1500 ms 56664 KB
#include "horses.h"
 
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define pll pair <ll,ll>
#define fi first
#define se second
#define MP make_pair
#define sz(a) (ll((a).size()))
#define BIT(mask,i) (((mask) >> (i))&1)
#define MASK(i) (1LL << (i))
set <ll> bigX;
const ll MAXN = 5e5+100;
const ll MOD = 1e9 + 7;
ll n;
set <ll> s;
namespace X{
    ll tree[MAXN*4];
    ll a[MAXN];
    void build(ll id,ll l,ll r){
        if (l==r)tree[id] = a[l];
        else{
            ll mid = (l + r) >> 1;
            build(id<<1,l,mid);
            build(id<<1|1,mid+1,r);
            tree[id] = tree[id<<1] * tree[id<<1|1] % MOD;
        }
    }
    void update(ll id,ll l,ll r,ll i){
        if (l > i || r < i)return;
        if (l == r){
            tree[id] = a[l];
            return;
        }
        ll mid = (l + r) >> 1;
        update(id<<1,l,mid,i);
        update(id<<1|1,mid+1,r,i);
        tree[id] = tree[id<<1] * tree[id<<1|1] % MOD;
    }
    ll get(ll id,ll l,ll r,ll i){
        if (l > i)return 1;
        if (r <= i)return tree[id];
        ll mid = (l + r) >> 1;
        return get(id<<1,l,mid,i)*get(id<<1|1,mid+1,r,i)%MOD;
    }
    void init(int X[]){
        for (ll i = 0;i < n;i ++)a[i] = X[i];
        for (ll i = 0;i < n;i ++){
            if (a[i] > 1)s.insert(i);
        }
        build(1,0,n-1);
    }
    void update(ll pos,ll val){
        s.erase(pos);
        a[pos]=val;
        if (val > 1)s.insert(pos);
        update(1,0,n-1,pos);
    }
    ll get(ll x){
        return get(1,0,n-1,x);
    }
}
namespace Y{
    ll a[MAXN];
    ll tree[MAXN*4];
    ll better(ll x,ll y){
        if (x==-1)return y;
        if (y==-1)return x;
        if (a[x] > a[y])return x;
        return y;
    }
    void build(ll id,ll l,ll r){
        if (l==r)tree[id] = l;
        else{
            ll mid = (l + r) >> 1;
            build(id<<1,l,mid);
            build(id<<1|1,mid+1,r);
            tree[id] = better(tree[id<<1],tree[id<<1|1]);
        }
    }
    void update(ll id,ll l,ll r,ll i){
        if (l > i || r < i)return;
        if (l == r){
            return;
        }
        ll mid = (l + r) >> 1;
        update(id<<1,l,mid,i);
        update(id<<1|1,mid+1,r,i);
        tree[id] = better(tree[id<<1],tree[id<<1|1]);
    }
    ll get(ll id,ll l,ll r,ll l1,ll r1){
        if (l > r1 || l1 > r)return -1;
        if (l1 <= l && r <= r1)return tree[id];
        ll mid = (l + r) >> 1;
        return better(get(id<<1,l,mid,l1,r1),get(id<<1|1,mid+1,r,l1,r1));
    }
    void init(int Y[]){
        for (ll i = 0;i < n;i ++)a[i] = Y[i];
        build(1,0,n-1);
    }
    void update(ll pos,ll val){
        a[pos] = val;
        update(1,0,n-1,pos);
    }
    ll get(ll l,ll r){
        return get(1,0,n-1,l,r);
    }
}
ll solve(){
    ll best = 0;
    ll best_id = -1;
    ll last = n;
    s.insert(0);
    for (auto it = s.rbegin();it != s.rend();it ++){
        ll tmp = Y::get(*it,last-1);
        if (Y::a[tmp] > best){
            best = Y::a[tmp];
            best_id = tmp;
        }
        best *= X::a[*it];
        last = *it;
    }
    return Y::a[best_id] * X::get(best_id) % MOD;
}
int init(int N, int X[], int Y[]) {
    n=N;
    X::init(X);
    Y::init(Y);
	return solve();
}
 
int updateX(int pos, int val) {
    X::update(pos,val);
	return solve();
}
 
int updateY(int pos, int val) {
    Y::update(pos,val);
	return solve();
}

Compilation message

horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:130:14: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  130 |  return solve();
      |         ~~~~~^~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:135:14: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  135 |  return solve();
      |         ~~~~~^~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:140:14: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  140 |  return solve();
      |         ~~~~~^~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6488 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6592 KB Output is correct
9 Correct 1 ms 6604 KB Output is correct
10 Correct 1 ms 6748 KB Output is correct
11 Correct 1 ms 6492 KB Output is correct
12 Correct 1 ms 6492 KB Output is correct
13 Correct 1 ms 6492 KB Output is correct
14 Correct 1 ms 6492 KB Output is correct
15 Correct 1 ms 6492 KB Output is correct
16 Correct 1 ms 6492 KB Output is correct
17 Correct 1 ms 6492 KB Output is correct
18 Correct 1 ms 6492 KB Output is correct
19 Correct 1 ms 6492 KB Output is correct
20 Correct 1 ms 6608 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6492 KB Output is correct
9 Correct 1 ms 6492 KB Output is correct
10 Correct 1 ms 6492 KB Output is correct
11 Correct 1 ms 6488 KB Output is correct
12 Correct 1 ms 6492 KB Output is correct
13 Correct 1 ms 6492 KB Output is correct
14 Correct 1 ms 6596 KB Output is correct
15 Correct 1 ms 6584 KB Output is correct
16 Correct 1 ms 6492 KB Output is correct
17 Correct 1 ms 6492 KB Output is correct
18 Correct 1 ms 6596 KB Output is correct
19 Correct 1 ms 6492 KB Output is correct
20 Correct 1 ms 6492 KB Output is correct
21 Incorrect 1 ms 6492 KB Output isn't correct
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1585 ms 56664 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6492 KB Output is correct
9 Correct 1 ms 6492 KB Output is correct
10 Correct 1 ms 6492 KB Output is correct
11 Correct 1 ms 6492 KB Output is correct
12 Correct 1 ms 6492 KB Output is correct
13 Correct 1 ms 6492 KB Output is correct
14 Correct 1 ms 6492 KB Output is correct
15 Correct 1 ms 6744 KB Output is correct
16 Correct 1 ms 6492 KB Output is correct
17 Correct 1 ms 6492 KB Output is correct
18 Correct 1 ms 6492 KB Output is correct
19 Correct 1 ms 6492 KB Output is correct
20 Correct 1 ms 6604 KB Output is correct
21 Incorrect 1 ms 6600 KB Output isn't correct
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6580 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6492 KB Output is correct
9 Correct 1 ms 6492 KB Output is correct
10 Correct 1 ms 6492 KB Output is correct
11 Correct 1 ms 6492 KB Output is correct
12 Correct 1 ms 6608 KB Output is correct
13 Correct 1 ms 6492 KB Output is correct
14 Correct 1 ms 6492 KB Output is correct
15 Correct 1 ms 6488 KB Output is correct
16 Correct 1 ms 6492 KB Output is correct
17 Correct 1 ms 6492 KB Output is correct
18 Correct 1 ms 6744 KB Output is correct
19 Correct 1 ms 6492 KB Output is correct
20 Correct 1 ms 6492 KB Output is correct
21 Incorrect 1 ms 6492 KB Output isn't correct
22 Halted 0 ms 0 KB -