답안 #1010253

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1010253 2024-06-28T15:28:41 Z hotboy2703 말 (IOI15_horses) C++17
0 / 100
276 ms 49252 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,val);
    }
    ll get(ll x){
        return get(1,0,n-1,x);
    }
}
namespace Y{
    ll a[MAXN];
    ll tree[MAXN];
    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(1);
    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];
        const static ll INF = 1e9;
        if (best > INF){
            break;
        }
        last = *it;
    }
    s.erase(1);
//    cout<<best_id<<'\n';
    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:136:14: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  136 |  return solve();
      |         ~~~~~^~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:141:14: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  141 |  return solve();
      |         ~~~~~^~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:146:14: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  146 |  return solve();
      |         ~~~~~^~
# 결과 실행 시간 메모리 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 Incorrect 1 ms 6492 KB Output isn't correct
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6488 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 Incorrect 1 ms 6492 KB Output isn't correct
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 276 ms 49252 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6488 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6588 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Incorrect 1 ms 6492 KB Output isn't correct
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 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 Incorrect 2 ms 6492 KB Output isn't correct
7 Halted 0 ms 0 KB -