Submission #278749

#TimeUsernameProblemLanguageResultExecution timeMemory
278749shinjanHorses (IOI15_horses)C++14
17 / 100
58 ms41848 KiB
#include <iostream> #include <bits/stdc++.h> #define maxN 500001 #define mod 1000000007 #include "horses.h" using namespace std; long long drvo[4*maxN]; long long mlazy[4*maxN]; long long dlazy[4*maxN]; int x[maxN]; int y[maxN]; int n; pair<int,int> range[4*maxN]; int st=1; void lenja(int node,int pos,int val,int prev) { if(mlazy[node]!=1 || dlazy[node]!=1) { drvo[node]=(drvo[node]/dlazy[node])*mlazy[node]; if(node<st) { mlazy[2*node]*=mlazy[node]; mlazy[2*node+1]*=mlazy[node]; dlazy[2*node]*=dlazy[node]; dlazy[2*node+1]*=dlazy[node]; } mlazy[node]=1; dlazy[node]=1; } //cout<<"cvor: "<<node<<"range:"<<range[node].first<<" "<<range[node].second<<endl; if(range[node].second<pos) return; if(range[node].first>=pos) { //cout<<"upada ceo"<<endl; drvo[node]=(drvo[node]/prev)*val; if(node<st) { mlazy[2*node]*=val; mlazy[2*node+1]*=val; dlazy[2*node]*=prev; dlazy[2*node+1]*=prev; } return; } lenja(2*node,pos,val,prev); lenja(2*node+1,pos,val,prev); drvo[node]=max(drvo[2*node],drvo[2*node+1]); } int init(int sz,int newx[],int newy[]) { n=sz; for(int i=0;i<n;i++) { x[i]=newx[i]; y[i]=newy[i]; } while(st<n) { st*=2; } long long currx=1; for(int i=0;i+st<2*st;i++) { if(i<n) { currx*=x[i]; drvo[i+st]=(y[i]*currx); } else{ drvo[i]=0; } range[i+st].first=i; range[i+st].second=i; mlazy[i+st]=1; dlazy[i+st]=1; } for(int i=st-1;i>=1;i--) { drvo[i]=max(drvo[2*i],drvo[2*i+1]); range[i].first=range[2*i].first; range[i].second=range[2*i+1].second; mlazy[i]=1; dlazy[i]=1; } long long ans=drvo[1]; ans=ans%mod; return ans; } void menjajX(int pos,int val,int prev) { //cout<<"menjam x na poz:"<<pos<<" prethodni"<<prev<<endl; pos=pos+st; drvo[pos]=((drvo[pos]/prev)*val); pos=pos/2; while(pos>=1) { drvo[pos]=max(drvo[2*pos],drvo[2*pos+1]); pos=pos/2; } } int updateY(int pos,int val) { int prev=y[pos]; y[pos]=val; pos=pos+st; drvo[pos]=((drvo[pos]/prev)*val); pos=pos/2; while(pos>=1) { drvo[pos]=max(drvo[2*pos],drvo[2*pos+1]); pos=pos/2; } long long ans=drvo[1]; ans=ans%mod; return ans; } int updateX(int pos,int val) { int prev=x[pos]; for(int i=pos;i<n;i++) { menjajX(i,val,prev); } x[pos]=val; long long ans=drvo[1]; ans=ans%mod; return ans; }

Compilation message (stderr)

horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:88:12: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   88 |     return ans;
      |            ^~~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:116:12: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  116 |     return ans;
      |            ^~~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:128:12: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  128 |     return ans;
      |            ^~~
#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...