Submission #344996

#TimeUsernameProblemLanguageResultExecution timeMemory
344996ogibogi2004말 (IOI15_horses)C++14
Compilation error
0 ms0 KiB
#include "horses.h" #include<bits/stdc++.h> using namespace std; #define y1 da #define ll long long const int MAXN=5e6+6; const ll MOD=1e9+7; int x1[MAXN],y1[MAXN]; ll fastpow(ll x,ll p) { if(p==0)return 1; ll t=fastpow(x,p/2); t*=t;t%=MOD; if(p%2==1)t*=x; t%=MOD; return t; } ll inverse(ll x) { return fastpow(x,MOD-2); } set<int>notones; int treeX[4*MAXN],treeY[4*MAXN]; void updateY(int idx,int l,int r,int q,int val) { if(l>q||r<q)return; if(l==r) { treeY[idx]=val; return; } int mid=(l+r)/2; if(mid>=q)updateY(idx*2,l,mid,q,val); else updateY(idx*2+1,mid+1,r,q,val); treeY[idx]=max(treeY[idx*2],treeY[idx*2+1]); } int n; int queryY(int idx,int l,int r,int ql,int qr) { if(l>qr)return 0; if(r<ql)return 0; if(l>=ql&&r<=qr)return treeY[idx]; int mid=(l+r)/2; return max(queryY(idx*2,l,mid,ql,qr),queryY(idx*2+1,mid+1,r,ql,qr)); } void updateX(int idx,int l,int r,int q,int val) { if(l>q||r<q)return; if(l==r) { treeX[idx]=val; return; } int mid=(l+r)/2; if(mid>=q)updateX(idx*2,l,mid,q,val); else updateX(idx*2+1,mid+1,r,q,val); treeX[idx]=((ll)*treeX[idx*2]*treeX[idx*2+1])%MOD; } int queryX(int idx,int l,int r,int ql,int qr) { if(l>qr)return 1; if(r<ql)return 1; if(l>=ql&&r<=qr)return treeX[idx]; int mid=(l+r)/2; return ((ll)queryX(idx*2,l,mid,ql,qr)*queryX(idx*2+1,mid+1,r,ql,qr))%MOD; } ll solve() { if(notones.size()==0) { return queryY(1,0,n-1,0,n-1); } int last=n; auto it=notones.end();--it; ll d1=1; int cnt=0,j; pair<int,int>ans; ans={-1,-1}; for(;;--it) { ++cnt; int y1=queryY(1,0,n-1,(*it),last-1); if(ans.first==-1) { j=cnt; ans.first=y1; ans.second=d1; } else if(ans.first*d1<y1*ans.second) { ans.first=y1; ans.second=d1; j=cnt; } if(it==notones.begin())break; last=(*it);d1*=x1[(*it)]; if(d1>(ll)1e9)break; } it=notones.end();--it; last=n; for(;;--it) { --j; if(j==0) { //cout<<queryX(1,0,n-1,0,(*it))<<" "<<queryY(1,0,n-1,(*it),last-1)<<endl; return ((ll)queryX(1,0,n-1,0,(*it))*queryY(1,0,n-1,(*it),last-1))%MOD; } last=(*it); } return 0; } int init(int N, int X[], int Y[]) { n=N; for(int i=0;i<N;++i) { x1[i]=X[i]; y1[i]=Y[i]; if(X[i]>0) { notones.insert(i); } updateX(1,0,N-1,i,X[i]); } for(int i=0;i<N;++i) { updateY(1,0,N-1,i,Y[i]); } return solve(); } int updateX(int pos, int val) { x1[pos]=val; if(val==1) { notones.erase(pos); } else notones.insert(pos); updateX(1,0,n-1,pos,x1[pos]); return solve(); } int updateY(int pos, int val) { y1[pos]=val; updateY(1,0,n-1,pos,y1[pos]); return solve(); }

Compilation message (stderr)

horses.cpp: In function 'void updateX(int, int, int, int, int)':
horses.cpp:58:30: error: invalid type argument of unary '*' (have 'int')
   58 |  treeX[idx]=((ll)*treeX[idx*2]*treeX[idx*2+1])%MOD;
      |                              ^
horses.cpp: In function 'int queryX(int, int, int, int, int)':
horses.cpp:66:70: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   66 |  return ((ll)queryX(idx*2,l,mid,ql,qr)*queryX(idx*2+1,mid+1,r,ql,qr))%MOD;
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
horses.cpp: In function 'long long int solve()':
horses.cpp:4:12: warning: declaration of 'da' shadows a global declaration [-Wshadow]
    4 | #define y1 da
      |            ^~
horses.cpp:83:7: note: in expansion of macro 'y1'
   83 |   int y1=queryY(1,0,n-1,(*it),last-1);
      |       ^~
horses.cpp:4:12: note: shadowed declaration is here
    4 | #define y1 da
      |            ^~
horses.cpp:8:14: note: in expansion of macro 'y1'
    8 | int x1[MAXN],y1[MAXN];
      |              ^~
horses.cpp:88:15: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   88 |    ans.second=d1;
      |               ^~
horses.cpp:93:15: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   93 |    ans.second=d1;
      |               ^~
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:130:14: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  130 |  return solve();
      |         ~~~~~^~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:141:14: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  141 |  return solve();
      |         ~~~~~^~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:147:14: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  147 |  return solve();
      |         ~~~~~^~