제출 #649907

#제출 시각아이디문제언어결과실행 시간메모리
649907PoonYaPat말 (IOI15_horses)C++14
17 / 100
453 ms524288 KiB
#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<<20]; //-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<<20]; 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; 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) { 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) { y[pos]=val; update3(0,n-1,1,pos); return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod; }

컴파일 시 표준 에러 (stderr) 메시지

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:82:29: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   82 |         s[idx]=check(s[2*idx],s[2*idx+1]);
      |                      ~~~~~~~^
horses.cpp:82:40: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   82 |         s[idx]=check(s[2*idx],s[2*idx+1]);
      |                               ~~~~~~~~~^
horses.cpp: In function 'void update2(int, int, int, int, int)':
horses.cpp:86:48: warning: declaration of 'y' shadows a global declaration [-Wshadow]
   86 | 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:86:41: warning: declaration of 'x' shadows a global declaration [-Wshadow]
   86 | 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:93:29: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   93 |         s[idx]=check(s[2*idx],s[2*idx+1]);
      |                      ~~~~~~~^
horses.cpp:93:40: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   93 |         s[idx]=check(s[2*idx],s[2*idx+1]);
      |                               ~~~~~~~~~^
horses.cpp: In function 'void update3(int, int, int, int)':
horses.cpp:97:41: warning: declaration of 'x' shadows a global declaration [-Wshadow]
   97 | 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:104:29: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  104 |         s[idx]=check(s[2*idx],s[2*idx+1]);
      |                      ~~~~~~~^
horses.cpp:104:40: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  104 |         s[idx]=check(s[2*idx],s[2*idx+1]);
      |                               ~~~~~~~~~^
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:115:36: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  115 |     return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
      |                                 ~~~^
horses.cpp:115:47: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  115 |     return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:123:33: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  123 |  return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
      |                              ~~~^
horses.cpp:123:44: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  123 |  return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:130:33: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  130 |  return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
      |                              ~~~^
horses.cpp:130:44: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
  130 |  return (query_ms2(0,n-1,1,0,s[1])*y[s[1]])%mod;
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...