답안 #649914

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
649914 2022-10-11T15:20:17 Z PoonYaPat 말 (IOI15_horses) C++14
17 / 100
230 ms 524288 KB
#include "horses.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;

int n;
const ll mod=1e9+7;
pll ms[1<<21]; //-1,mod
ll x[500001],y[500001];

void build_ms(int l, int r, int idx) {
    if (l==r) ms[idx]={x[l],x[l]};
    else {
        int mid=(l+r)/2;
        build_ms(l,mid,2*idx);
        build_ms(mid+1,r,2*idx+1);

        if (ms[2*idx].first==-1 || ms[2*idx+1].first==-1) ms[idx].first=-1;
        else {
            if (ms[2*idx].first*ms[2*idx+1].first>1e9) ms[idx].first=-1;
            else ms[idx].first=ms[2*idx].first*ms[2*idx+1].first;
        }
        ms[idx].second=(ms[2*idx].second*ms[2*idx+1].second)%mod;
    }
}

void update_ms(int l, int r, int idx, int k, ll val) {
    if (l>k || k>r) return;
    if (l==r) ms[idx]={val,val};
    else {
        int mid=(l+r)/2;
        update_ms(l,mid,2*idx,k,val);
        update_ms(mid+1,r,2*idx+1,k,val);

        if (ms[2*idx].first==-1 || ms[2*idx+1].first==-1) ms[idx].first=-1;
        else {
            if (ms[2*idx].first*ms[2*idx+1].first>1e9) ms[idx].first=-1;
            else ms[idx].first=ms[2*idx].first*ms[2*idx+1].first;
        }
        ms[idx].second=(ms[2*idx].second*ms[2*idx+1].second)%mod;
    }
}

ll query_ms(int l, int r, int idx, int x, int y) {
    if (l>y || r<x) return 1;
    if (x<=l && r<=y) return ms[idx].first;

    int mid=(l+r)/2;
    ll ml=query_ms(l,mid,2*idx,x,y), mr=query_ms(mid+1,r,2*idx+1,x,y);

    if (ml==-1 || mr==-1) return -1;
    else {
        if (ml*mr>1e9) return -1;
        else return ml*mr;
    }
}

ll query_ms2(int l, int r, int idx, int x, int y) {
    if (l>y || r<x) return 1;
    if (x<=l && r<=y) return ms[idx].second;

    int mid=(l+r)/2;
    return (query_ms2(l,mid,2*idx,x,y)*query_ms2(mid+1,r,2*idx+1,x,y))%mod;
}

ll h;
int check(int a, int b) { //whether who is bigger between s[a] and a[b]
    h=query_ms(0,n-1,1,a+1,b);
    if (h==-1) return b;
    if (y[a]>y[b]*h) return a;
    else return b;
}

ll s[1<<21];

void update(int l, int r, int idx) {
    if (l==r) s[idx]=l;
    else {
        int mid=(l+r)/2;
        update(l,mid,2*idx);
        update(mid+1,r,2*idx+1);
        s[idx]=check(s[2*idx],s[2*idx+1]);
    }
}

void update2(int l, int r, int idx, int x, int y) {
    if (l>y || r<x) return;
    if (x<=l && y<=r) return;
    else {
        int mid=(l+r)/2;
        update2(l,mid,2*idx,x,y);
        update2(mid+1,r,2*idx+1,x,y);
        s[idx]=check(s[2*idx],s[2*idx+1]);
    }
}

void update3(int l, int r, int idx, int x) {
    if (l>x || x>r) return;
    if (l==r) return;
    else {
        int mid=(l+r)/2;
        update3(l,mid,2*idx,x);
        update3(mid+1,r,2*idx+1,x);
        s[idx]=check(s[2*idx],s[2*idx+1]);
    }
}

int init(int N, int X[], int Y[]) {
    n=N;
    if (n<=10) {
        for (int i=0; i<n; ++i) x[i]=X[i], y[i]=Y[i];
        build_ms(0,n-1,1);

        update(0,n-1,1);
    }

    return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
}

int updateX(int pos, int val) {
    if (n<=10) {
        x[pos]=val;
        update_ms(0,n-1,1,pos,val);
        update2(0,n-1,1,pos,n-1);
    }

	return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
}

int updateY(int pos, int val) {
    if (n<=10) {
        y[pos]=val;
        update3(0,n-1,1,pos);
    }

	return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
}

Compilation message

horses.cpp: In function 'void build_ms(int, int, int)':
horses.cpp:21:32: warning: conversion from 'long long int' to 'double' may change value [-Wconversion]
   21 |             if (ms[2*idx].first*ms[2*idx+1].first>1e9) ms[idx].first=-1;
      |                 ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
horses.cpp: In function 'void update_ms(int, int, int, int, ll)':
horses.cpp:38:32: warning: conversion from 'long long int' to 'double' may change value [-Wconversion]
   38 |             if (ms[2*idx].first*ms[2*idx+1].first>1e9) ms[idx].first=-1;
      |                 ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
horses.cpp: In function 'll query_ms(int, int, int, int, int)':
horses.cpp:45:47: warning: declaration of 'y' shadows a global declaration [-Wshadow]
   45 | ll query_ms(int l, int r, int idx, int x, int y) {
      |                                           ~~~~^
horses.cpp:10:14: note: shadowed declaration is here
   10 | ll x[500001],y[500001];
      |              ^
horses.cpp:45:40: warning: declaration of 'x' shadows a global declaration [-Wshadow]
   45 | ll query_ms(int l, int r, int idx, int x, int y) {
      |                                    ~~~~^
horses.cpp:10:4: note: shadowed declaration is here
   10 | ll x[500001],y[500001];
      |    ^
horses.cpp:54:15: warning: conversion from 'll' {aka 'long long int'} to 'double' may change value [-Wconversion]
   54 |         if (ml*mr>1e9) return -1;
      |             ~~^~~
horses.cpp: In function 'll query_ms2(int, int, int, int, int)':
horses.cpp:59:48: warning: declaration of 'y' shadows a global declaration [-Wshadow]
   59 | ll query_ms2(int l, int r, int idx, int x, int y) {
      |                                            ~~~~^
horses.cpp:10:14: note: shadowed declaration is here
   10 | ll x[500001],y[500001];
      |              ^
horses.cpp:59:41: warning: declaration of 'x' shadows a global declaration [-Wshadow]
   59 | ll query_ms2(int l, int r, int idx, int x, int y) {
      |                                     ~~~~^
horses.cpp:10:4: note: shadowed declaration is here
   10 | ll x[500001],y[500001];
      |    ^
horses.cpp: In function 'void update(int, int, int)':
horses.cpp:83:29: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   83 |         s[idx]=check(s[2*idx],s[2*idx+1]);
      |                      ~~~~~~~^
horses.cpp:83:40: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   83 |         s[idx]=check(s[2*idx],s[2*idx+1]);
      |                               ~~~~~~~~~^
horses.cpp: In function 'void update2(int, int, int, int, int)':
horses.cpp:87:48: warning: declaration of 'y' shadows a global declaration [-Wshadow]
   87 | void update2(int l, int r, int idx, int x, int y) {
      |                                            ~~~~^
horses.cpp:10:14: note: shadowed declaration is here
   10 | ll x[500001],y[500001];
      |              ^
horses.cpp:87:41: warning: declaration of 'x' shadows a global declaration [-Wshadow]
   87 | void update2(int l, int r, int idx, int x, int y) {
      |                                     ~~~~^
horses.cpp:10:4: note: shadowed declaration is here
   10 | ll x[500001],y[500001];
      |    ^
horses.cpp:94:29: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   94 |         s[idx]=check(s[2*idx],s[2*idx+1]);
      |                      ~~~~~~~^
horses.cpp:94:40: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   94 |         s[idx]=check(s[2*idx],s[2*idx+1]);
      |                               ~~~~~~~~~^
horses.cpp: In function 'void update3(int, int, int, int)':
horses.cpp:98:41: warning: declaration of 'x' shadows a global declaration [-Wshadow]
   98 | void update3(int l, int r, int idx, int x) {
      |                                     ~~~~^
horses.cpp:10:4: note: shadowed declaration is here
   10 | ll x[500001],y[500001];
      |    ^
horses.cpp:105:29: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  105 |         s[idx]=check(s[2*idx],s[2*idx+1]);
      |                      ~~~~~~~^
horses.cpp:105:40: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  105 |         s[idx]=check(s[2*idx],s[2*idx+1]);
      |                               ~~~~~~~~~^
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:118:36: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  118 |     return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
      |                                 ~~~^
horses.cpp:118:47: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  118 |     return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:128:33: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  128 |  return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
      |                              ~~~^
horses.cpp:128:44: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  128 |  return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:137:33: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  137 |  return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
      |                              ~~~^
horses.cpp:137:44: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  137 |  return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 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 244 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 340 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 1 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 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 1 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 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 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 1 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 0 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 340 KB Output is correct
17 Correct 0 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 340 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Runtime error 216 ms 524288 KB Execution killed with signal 9
23 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 37 ms 4428 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 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 0 ms 212 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 0 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 0 ms 212 KB Output is correct
13 Correct 0 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 0 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 340 KB Output is correct
19 Correct 1 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 Runtime error 230 ms 524288 KB Execution killed with signal 9
23 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 1 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 0 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 1 ms 212 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 0 ms 340 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 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 Runtime error 221 ms 524288 KB Execution killed with signal 9
23 Halted 0 ms 0 KB -