제출 #98428

#제출 시각아이디문제언어결과실행 시간메모리
98428wilwxk말 (IOI15_horses)C++17
34 / 100
1585 ms32504 KiB
#include <bits/stdc++.h> #include "horses.h" using namespace std; typedef long long ll; struct node { ll val; int mxi; bool flag; }; const int MAXN=5e5+11; const int MOD=1e9+7; node seg[MAXN*4]; ll x[MAXN], y[MAXN]; int n; pair<ll, bool> queryx(int sind, int ini, int fim, int qini, int qfim) { if(qini>fim||qfim<ini) return { 1, 0 }; if(qini<=ini&&qfim>=fim) return { seg[sind].val, seg[sind].flag }; int m=(ini+fim)/2; int e=sind*2; int d=e+1; auto aa=queryx(e, ini, m, qini, qfim); auto bb=queryx(d, m+1, fim, qini, qfim); ll cc=aa.first; cc*=bb.first; if(aa.second||bb.second||cc>=MOD) return { cc%MOD, 1 }; return { cc%MOD, 0 }; } void updateval(int sind, int ini, int fim, int ind, int val) { if(ind<ini||ind>fim) return; if(ini==fim) { seg[sind].mxi=ini; seg[sind].val=val; return; } int m=(ini+fim)/2; int e=sind*2; int d=e+1; updateval(e, ini, m, ind, val); updateval(d, m+1, fim, ind, val); seg[sind].val=seg[e].val*seg[d].val; seg[sind].flag=seg[sind].val>((ll)MOD); if(seg[e].flag||seg[d].flag) seg[sind].flag=1; seg[sind].val%=MOD; } void updatemax(int sind, int ini, int fim, int ind) { if(ind<ini||ind>fim) return; if(ini==fim) { seg[sind].mxi=ini; seg[sind].val=x[ini]; return; } int m=(ini+fim)/2; int e=sind*2; int d=e+1; updatemax(e, ini, m, ind); updatemax(d, m+1, fim, ind); auto meio=queryx(1, 1, n, seg[e].mxi+1, seg[d].mxi); ll aa=y[seg[e].mxi]+(y[seg[d].mxi]-1); aa/=y[seg[d].mxi]; if(aa<=meio.first||meio.second) seg[sind].mxi=seg[d].mxi; else seg[sind].mxi=seg[e].mxi; } void build(int sind, int ini, int fim) { if(ini==fim) { seg[sind].mxi=ini; seg[sind].val=x[ini]; seg[sind].flag=0; return; } int m=(ini+fim)/2; int e=sind*2; int d=e+1; build(e, ini, m); build(d, m+1, fim); seg[sind].mxi=seg[e].mxi; seg[sind].val=seg[e].val*seg[d].val; seg[sind].flag=seg[sind].val>((ll)MOD); if(seg[e].flag||seg[d].flag) seg[sind].flag=1; seg[sind].val%=MOD; } int updateX(int ind, int val) { ind++; x[ind]=val; updateval(1, 1, n, ind, val); updatemax(1, 1, n, ind); int melhor=seg[1].mxi; auto meio=queryx(1, 1, n, 1, melhor); ll resp=y[melhor]*meio.first; resp%=MOD; return resp; } int updateY(int ind, int val) { ind++; y[ind]=val; updatemax(1, 1, n, ind); int melhor=seg[1].mxi; auto meio=queryx(1, 1, n, 1, melhor); ll resp=y[melhor]*meio.first; resp%=MOD; return resp; } int init(int c, int a[], int b[]) { n=c; for(int i=1; i<=n; i++) { x[i]=a[i-1]; y[i]=b[i-1]; } build(1, 1, n); for(int i=1; i<=n; i++) updatemax(1, 1, n, i); return updateY(0, y[1]); } // int main() { // int n, q; int a[1000], b[1000]; // scanf("%d %d", &n, &q); // for(int i=0; i<n; i++) scanf("%d", &a[i]); // for(int i=0; i<n; i++) scanf("%d", &b[i]); // printf("%d\n", init(n, a, b)); // while(q--) { // int a, b, c, resp; scanf("%d %d %d", &c, &a, &b); // if(c==1) resp=updateX(a, b); // else resp=updateY(a, b); // printf("%d\n", resp); // } // }

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

horses.cpp: In function 'int updateX(int, int)':
horses.cpp:84:12: warning: conversion to 'int' from 'll {aka long long int}' may alter its value [-Wconversion]
     return resp;
            ^~~~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:94:12: warning: conversion to 'int' from 'll {aka long long int}' may alter its value [-Wconversion]
     return resp;
            ^~~~
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:105:26: warning: conversion to 'int' from 'll {aka long long int}' may alter its value [-Wconversion]
     return updateY(0, y[1]);
                       ~~~^
#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...