Submission #485897

#TimeUsernameProblemLanguageResultExecution timeMemory
485897gavgavFountain (eJOI20_fountain)C++17
100 / 100
118 ms7364 KiB
#include <stdio.h> #define MAX_N 100000 #define MAX_M 200000 #define MAX_S 100000000000000 struct reservoir { long long diameters, capacity; }; struct query { int level, volume, rasp; }; int stiva[MAX_N + 1], next[MAX_M + 1], liste[MAX_N + 1]; long long sumaNec[MAX_N + 1]; struct reservoir reservoirs[MAX_N + 1]; struct query q[MAX_M + 1]; int main() { int height, queries_number, top, st, dr, mij, i, j; long long sumaV; scanf( "%d%d", &height, &queries_number); reservoirs[0].diameters = 1000000001; reservoirs[0].capacity = 0; for ( i = 1; i <= height; ++i) scanf( "%d%d", &reservoirs[i].diameters, &reservoirs[i].capacity); for ( i = 1; i <= queries_number; ++i) { scanf( "%d%d", &q[i].level, &q[i].volume); next[i] = liste[q[i].level]; liste[q[i].level] = i; } stiva[0] = 0; sumaNec[0] = -MAX_S - 1; top = 0; sumaV = 0; for ( i = height; i >= 1; --i) { while ( reservoirs[i].diameters >= reservoirs[stiva[top]].diameters ) { sumaV -= reservoirs[stiva[top]].capacity; --top; } ++top; stiva[top] = i; sumaNec[top] = sumaV; sumaV += reservoirs[i].capacity; j = liste[i]; while ( j != 0 ) { st = top + 1; dr = 0; while ( st - dr > 1 ) { mij = (st + dr) / 2; if ( sumaV - sumaNec[mij] >= q[j].volume) dr = mij; else st = mij; } q[j].rasp = stiva[dr]; j = next[j]; } } for ( i = 1; i <= queries_number; ++i) printf( "%d\n", q[i].rasp ); }

Compilation message (stderr)

fountain.cpp: In function 'int main()':
fountain.cpp:22:18: warning: format '%d' expects argument of type 'int*', but argument 2 has type 'long long int*' [-Wformat=]
   22 |         scanf( "%d%d", &reservoirs[i].diameters, &reservoirs[i].capacity);
      |                 ~^     ~~~~~~~~~~~~~~~~~~~~~~~~
      |                  |     |
      |                  int*  long long int*
      |                 %lld
fountain.cpp:22:20: warning: format '%d' expects argument of type 'int*', but argument 3 has type 'long long int*' [-Wformat=]
   22 |         scanf( "%d%d", &reservoirs[i].diameters, &reservoirs[i].capacity);
      |                   ~^                             ~~~~~~~~~~~~~~~~~~~~~~~
      |                    |                             |
      |                    int*                          long long int*
      |                   %lld
fountain.cpp:18:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |     scanf( "%d%d", &height, &queries_number);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fountain.cpp:22:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |         scanf( "%d%d", &reservoirs[i].diameters, &reservoirs[i].capacity);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fountain.cpp:24:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   24 |         scanf( "%d%d", &q[i].level, &q[i].volume);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...