제출 #87983

#제출 시각아이디문제언어결과실행 시간메모리
87983Pajaraja말 (IOI15_horses)C++17
100 / 100
1167 ms91740 KiB
#include "horses.h" #include <bits/stdc++.h> #define MOD 1000000007 long long y[500040],x[500040],pr,seg[2][2000040],pb[32],td; void upd(int l,int r,int val,int k,int poz,int ind) { if(l==r) { seg[k][ind]=val; return; } int s=(l+r)/2; if(s>=poz) upd(l,s,val,k,poz,2*ind); else upd(s+1,r,val,k,poz,2*ind+1); seg[k][ind]=fmax(seg[k][2*ind],seg[k][2*ind+1]); } long long find(int lt,int rt,int l,int r,int k,int ind) { if(l>rt||r<lt) return 0; if(l>=lt&&r<=rt) return seg[k][ind]; int s=(l+r)/2; return fmax(find(lt,rt,l,s,k,2*ind),find(lt,rt,s+1,r,k,2*ind+1)); } long long mmi(long long b,int exp) { if(exp==0) return 1; long long r=mmi(b,exp/2); r=(r*r)%MOD; if(exp%2==0) return r; return (r*b)%MOD; } int n,cnt; int resi() { bool gdd=false; if(cnt<32) { pb[cnt]=-1; gdd=true; cnt++; } long long prt=1; int ind=0,prev=n; for(int i=0;i<cnt;i++) { long long r=find(pb[i],prev-1,0,n-1,1,1); if(r>prt) { prt=r; ind=i; } if(pb[i]!=-1) prt*=x[pb[i]]; prev=pb[i]; if(prt>MOD) break; } prt=1; for(int i=0;i<ind;i++) if(pb[i]!=-1) prt*=x[pb[i]]; prev=(ind==0?n:pb[ind-1]); long long r=find(pb[ind],prev-1,0,n-1,1,1); if(gdd) cnt--; return (((pr*mmi(prt,MOD-2))%MOD)*r)%MOD; } int init(int N, int X[], int Y[]) { n=N; pr=1; td=0; for(int i=0;i<n;i++) { x[i]=X[i]; upd(0,n-1,x[i],0,i,1); } for(int i=0;i<n;i++) { y[i]=Y[i]; upd(0,n-1,y[i],1,i,1); } for(int i=0;i<n;i++) pr=(pr*x[i])%MOD; for(int i=n-1;i>=0;i--) if(x[i]>1) { pb[cnt]=i; cnt++; if(cnt==32) break; } for(int i=n-1;i>=0;i--) if(x[i]>1) td++; return resi(); } int binarna(int l,int r,int k) { if(l==r) return l; int s=(l+r+1)/2; if(find(s,k,0,n-1,0,1)>1) return binarna(s,r,k); return binarna(l,s-1,k); } int updateX(int pos, int val) { pr=(pr*mmi(x[pos],MOD-2))%MOD; long long tmp,r=x[pos]; x[pos]=val; pr=(pr*val)%MOD; upd(0,n-1,val,0,pos,1); if(r==1 && val>1) { td++; int d=33,prev=n; for(int i=0;i<cnt;i++) { if(pos>pb[i] && pos<prev) { d=i; break; } prev=pb[i]; } for(int i=31;i>d;i--) pb[i]=pb[i-1]; if(d==33&&cnt<32) pb[cnt]=pos; pb[d]=pos; cnt=fmin(32,td); } if(r>1&&val==1) { td--; int d=33; for(int i=0;i<cnt;i++) { if(pb[i]==pos) { d=i; break; } } for(int i=d;i<cnt-1;i++) pb[i]=pb[i+1]; if(td>=32&&d!=33) pb[31]=binarna(0,pb[30]-1,pb[30]-1); cnt=fmin(32,td); } return resi(); } int updateY(int pos, int val) { upd(0,n-1,val,1,pos,1); return resi(); } //QED

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

horses.cpp: In function 'void upd(int, int, int, int, int, int)':
horses.cpp:15:31: warning: conversion to 'double' from 'long long int' may alter its value [-Wconversion]
  seg[k][ind]=fmax(seg[k][2*ind],seg[k][2*ind+1]);
                   ~~~~~~~~~~~~^
horses.cpp:15:47: warning: conversion to 'double' from 'long long int' may alter its value [-Wconversion]
  seg[k][ind]=fmax(seg[k][2*ind],seg[k][2*ind+1]);
                                 ~~~~~~~~~~~~~~^
horses.cpp:15:18: warning: conversion to 'long long int' from 'double' may alter its value [-Wfloat-conversion]
  seg[k][ind]=fmax(seg[k][2*ind],seg[k][2*ind+1]);
              ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
horses.cpp: In function 'long long int find(int, int, int, int, int, int)':
horses.cpp:22:18: warning: conversion to 'double' from 'long long int' may alter its value [-Wconversion]
  return fmax(find(lt,rt,l,s,k,2*ind),find(lt,rt,s+1,r,k,2*ind+1));
              ~~~~^~~~~~~~~~~~~~~~~~~
horses.cpp:22:42: warning: conversion to 'double' from 'long long int' may alter its value [-Wconversion]
  return fmax(find(lt,rt,l,s,k,2*ind),find(lt,rt,s+1,r,k,2*ind+1));
                                      ~~~~^~~~~~~~~~~~~~~~~~~~~~~
horses.cpp:22:13: warning: conversion to 'long long int' from 'double' may alter its value [-Wfloat-conversion]
  return fmax(find(lt,rt,l,s,k,2*ind),find(lt,rt,s+1,r,k,2*ind+1));
         ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
horses.cpp: In function 'int resi()':
horses.cpp:46:24: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
   long long r=find(pb[i],prev-1,0,n-1,1,1);
                    ~~~~^
horses.cpp:53:12: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
   prev=pb[i];
        ~~~~^
horses.cpp:58:14: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  prev=(ind==0?n:pb[ind-1]);
       ~~~~~~~^~~~~~~~~~~~~
horses.cpp:59:25: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  long long r=find(pb[ind],prev-1,0,n-1,1,1);
                   ~~~~~~^
horses.cpp:61:38: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  return (((pr*mmi(prt,MOD-2))%MOD)*r)%MOD;
                                      ^
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:71:19: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
      upd(0,n-1,x[i],0,i,1);
                ~~~^
horses.cpp:76:19: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
      upd(0,n-1,y[i],1,i,1);
                ~~~^
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:113:13: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
    prev=pb[i];
         ~~~~^
horses.cpp:118:17: warning: conversion to 'double' from 'long long int' may alter its value [-Wconversion]
   cnt=fmin(32,td);
                 ^
horses.cpp:118:11: warning: conversion to 'int' from 'double' may alter its value [-Wfloat-conversion]
   cnt=fmin(32,td);
       ~~~~^~~~~~~
horses.cpp:133:44: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
   if(td>=32&&d!=33) pb[31]=binarna(0,pb[30]-1,pb[30]-1);
                                      ~~~~~~^~
horses.cpp:133:53: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
   if(td>=32&&d!=33) pb[31]=binarna(0,pb[30]-1,pb[30]-1);
                                               ~~~~~~^~
horses.cpp:134:17: warning: conversion to 'double' from 'long long int' may alter its value [-Wconversion]
   cnt=fmin(32,td);
                 ^
horses.cpp:134:11: warning: conversion to 'int' from 'double' may alter its value [-Wfloat-conversion]
   cnt=fmin(32,td);
       ~~~~^~~~~~~
horses.cpp:98:12: warning: unused variable 'tmp' [-Wunused-variable]
  long long tmp,r=x[pos];
            ^~~
#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...