Submission #935011

#TimeUsernameProblemLanguageResultExecution timeMemory
935011PagodePaivaHorses (IOI15_horses)C++17
17 / 100
28 ms16476 KiB
#include <bits/stdc++.h> #include "horses.h" #define N 500010 using namespace std; int n; long long v[N][2]; long long dp[N]; const int mod = 1e9+7; long long p = 1; long long binpow(int a, int b, int m){ if(b == 0) return 1; int t = binpow(a, b/2, m); if(b % 2 == 0) return (t*t) % m; else return ((((t*t) % m)*a) % m); } int solve(){ if(n >= 40){ return (p*v[n][1]) % mod; } else{ long long aux = 1; for(int i = 1;i <= n;i++){ aux *= v[i][0]; if(aux > 1e9){ return (p*v[n][1]) % mod; } } } dp[0] = 0; long long res = 0; for(int i = 1;i <= n;i++){ dp[i] = 0; int prod = 1; for(int j = i;j > 0;j--){ prod *= v[j][0]; dp[i] = max(dp[i], dp[j-1] + ((prod-1)*v[i][1])); res = max(res, dp[j-1] + prod*v[i][1]); } // cout << dp[i] << ' '; } return res % mod; } int init(int NN, int X[], int Y[]) { n = NN; for(int i = 1;i <= n;i++){ v[i][0] = X[i-1]; p *= v[i][0]; p %= mod; v[i][1] = Y[i-1]; } return solve(); } int updateX(int pos, int val) { p *= binpow(v[pos+1][0], mod-2, mod); p %= mod; v[pos+1][0] = val; p *= val; p %= mod; return solve(); } int updateY(int pos, int val) { v[pos+1][1] = val; return solve(); }

Compilation message (stderr)

horses.cpp: In function 'long long int binpow(int, int, int)':
horses.cpp:15:16: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   15 |  int t = binpow(a, b/2, m);
      |          ~~~~~~^~~~~~~~~~~
horses.cpp: In function 'int solve()':
horses.cpp:22:22: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   22 |   return (p*v[n][1]) % mod;
      |          ~~~~~~~~~~~~^~~~~
horses.cpp:28:7: warning: conversion from 'long long int' to 'double' may change value [-Wconversion]
   28 |    if(aux > 1e9){
      |       ^~~
horses.cpp:29:24: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   29 |     return (p*v[n][1]) % mod;
      |            ~~~~~~~~~~~~^~~~~
horses.cpp:39:9: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   39 |    prod *= v[j][0];
      |    ~~~~~^~~~~~~~~~
horses.cpp:45:13: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   45 |  return res % mod;
      |         ~~~~^~~~~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:60:24: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   60 |  p *= binpow(v[pos+1][0], mod-2, 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...