Submission #285498

#TimeUsernameProblemLanguageResultExecution timeMemory
285498achibasadzishviliSolar Storm (NOI20_solarstorm)C++14
100 / 100
608 ms157908 KiB
#include<bits/stdc++.h> #define ll long long #define f first #define s second #define pb push_back using namespace std; ll a[1000003],p[1000003],q[1000003],w[1000003]; int P[1000003][21]; ll sum[1000003],mx,o[1000003]; ll n,m,k,s,v[1000003],ans,ind; ll get(ll x,ll y){ ll val = 0; for(int j=20; j>=0; j--) if(y >= (1 << j)){ y -= (1 << j); x = P[x][j]; } return -sum[x]; } int main(){ ios::sync_with_stdio(false); cin >> n >> s >> k; for(int i=2; i<=n; i++){ cin >> a[i]; a[i] += a[i - 1]; } for(int i=1; i<=n; i++){ cin >> v[i]; v[i] += v[i - 1]; } ll l = 0,r = 0,wr = 0; a[0] = 0; for(int i=1; i<=n; i++){ while(a[i] - a[l] > k)l++; while(r < n && a[r + 1] - a[i] <= k)r++; for(int j=max(1LL,wr + 1); j<=r; j++){ p[j] = max(l - 1 , 0LL); q[j] = v[r] - v[max(l - 1,0LL)]; sum[j] = sum[max(l - 1,0LL)] + v[j] - v[l - 1]; w[j] = i; } wr = r; } for(int i=1; i<=n; i++){ P[i][0] = p[i]; for(int j=1; j<=20; j++) P[i][j] = P[P[i][j - 1]][j - 1]; ll mx = sum[i] + get(i , s); if(mx >= ans){ ans = mx; ind = i; } } vector<ll>an; while(ind != 0 && an.size() < s){ an.pb(w[ind]); ind = p[ind]; } sort(an.begin() , an.end()); cout << an.size() << '\n'; for(int i=0; i<an.size(); i++) cout << an[i] << " "; return 0; }

Compilation message (stderr)

SolarStorm.cpp: In function 'long long int get(long long int, long long int)':
SolarStorm.cpp:12:8: warning: unused variable 'val' [-Wunused-variable]
   12 |     ll val = 0;
      |        ^~~
SolarStorm.cpp: In function 'int main()':
SolarStorm.cpp:60:33: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   60 |     while(ind != 0 && an.size() < s){
      |                                 ^
SolarStorm.cpp:67:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |     for(int i=0; i<an.size(); i++)
      |                  ~^~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...