제출 #69006

#제출 시각아이디문제언어결과실행 시간메모리
69006theknife2001말 (IOI15_horses)C++17
54 / 100
1579 ms55148 KiB
#include "horses.h" //#include "grader.cpp" #include <bits/stdc++.h> #define mid (l+r)/2 using namespace std; const int N=5e5+55; long long tree[N*4][2]; long long x[N]; long long y[N]; set < int > st; int m=1e9+7; int n; void build(int l , int r , int node) { if(l==r) { tree[node][0]=x[l]; tree[node][1]=y[l]; return ; } build(l,mid,node*2); build(mid+1,r,node*2+1); tree[node][0]=tree[node*2][0]*tree[node*2+1][0]; tree[node][0]%=m; tree[node][1]=tree[node*2][1]*tree[node*2+1][1]; tree[node][1]%=m; } void update(int l , int r , int node , int ind , int val , int q) { if(l==r&&l==ind) { tree[node][q]=val; return ; } if(ind<=mid) update(l,mid,node*2,ind,val,q); else update(mid+1,r,node*2+1,ind,val,q); tree[node][q]=tree[node*2][q]*tree[node*2+1][q]; tree[node][q]%=m; } long long query(int l , int r , int node , int x , int y , int q) { if(x<=l&&r<=y) return tree[node][q]; if(l>y||r<x) return 1; return (query(l,mid,node*2,x,y,q)*query(mid+1,r,node*2+1,x,y,q))%m; } int solve() { int i=n-1; long long ret=0; long long temp=1; long long s=1; for(auto ii:st) { i=-ii; s*=x[i]; if(s>10000000000) break; } int j=i+1; bool q=0; int bestpos=n-1; for(;i<n;i++) { temp*=x[i]; if(y[i]*temp>ret) { ret=y[i]*temp; bestpos=i; } if(ret<0||y[i]*temp<0) { q=1; break; } } if(q) { i=j; temp=1; ret=0; bestpos=n-1; for(;i<n;i++) { temp*=x[i]; if(y[i]*temp>ret) { ret=y[i]*temp; bestpos=i; } if(ret<0||y[i]*temp<0) { assert(0); } } } return (y[bestpos]*query(0,n-1,1,0,bestpos,0))%m; } int init(int N, int X[], int Y[]) { n=N; st.insert(0); for(int i=0;i<N;i++) { x[i]=X[i]; if(x[i]!=1) st.insert(-i); y[i]=Y[i]; } build(0,n-1,1); return solve(); } int updateX(int pos, int val) { if(x[pos]==1) st.insert(-pos); x[pos]=val; if(val==1&&pos) st.erase(-pos); update(0,n-1,1,pos,val,0); return solve(); } int updateY(int pos, int val) { y[pos]=val; update(0,n-1,1,pos,val,1); return solve(); }

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

horses.cpp: In function 'long long int query(int, int, int, int, int, int)':
horses.cpp:46:65: warning: declaration of 'y' shadows a global declaration [-Wshadow]
 long long query(int l , int r , int node , int x , int y , int q)
                                                                 ^
horses.cpp:10:11: note: shadowed declaration is here
 long long y[N];
           ^
horses.cpp:46:65: warning: declaration of 'x' shadows a global declaration [-Wshadow]
 long long query(int l , int r , int node , int x , int y , int q)
                                                                 ^
horses.cpp:9:11: note: shadowed declaration is here
 long long x[N];
           ^
horses.cpp: In function 'int solve()':
horses.cpp:105:51: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
     return (y[bestpos]*query(0,n-1,1,0,bestpos,0))%m;
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:108:33: warning: declaration of 'N' shadows a global declaration [-Wshadow]
 int init(int N, int X[], int Y[])
                                 ^
horses.cpp:7:11: note: shadowed declaration is here
 const int N=5e5+55;
           ^
#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...