Submission #202854

#TimeUsernameProblemLanguageResultExecution timeMemory
202854MercenaryFire (JOI20_ho_t5)C++14
100 / 100
390 ms59636 KiB
#include<bits/stdc++.h> #define taskname "A" #define pb push_back #define mp make_pair using namespace std; const int maxn = 2e5 + 6; typedef pair<int,int> ii; typedef long long ll; ll bit[maxn]; void U(int x , int val){ assert(x > 0); for( ; x < maxn ; x += x & -x)bit[x] += val; } ll Q(int x){ if(x <= 0)return 0; ll res = 0; for( ; x > 0 ; x &= x - 1)res += bit[x]; return res; } int n , q; int s[maxn] , pre[maxn] , suf[maxn]; vector<pair<ii,int>> query[maxn]; ll ans[maxn]; vector<ii> f[maxn] , g[maxn]; int main(){ ios_base::sync_with_stdio(0);cin.tie(0); if(fopen(taskname".INP","r")){ freopen(taskname".INP","r",stdin); freopen(taskname".OUT","w",stdout); } cin >> n >> q; for(int i = 1 ; i <= n ; ++i){ cin >> s[i]; } for(int i = 1 ; i <= q ; ++i){ int t , l , r;cin >> t >> l >> r; query[t].pb(mp(mp(l,r),i)); } vector<int> val; for(int i = 1 ; i <= n ; ++i){ while(val.size() && s[val.back()] <= s[i])val.pop_back(); if(val.size())pre[i] = val.back(); else pre[i] = 0; val.pb(i); } val.clear(); for(int i = n ; i >= 1 ; --i){ while(val.size() && s[val.back()] < s[i])val.pop_back(); if(val.size())suf[i] = val.back(); else suf[i] = n + 1; val.pb(i); } for(int i = 1 ; i <= n ; ++i){ if(pre[i] == 0 || i - pre[i] > suf[i] - i){ for(int j = i ; j < suf[i] ; ++j){ f[j - i].pb(mp(j,s[i])); if(pre[i])f[j - pre[i]].pb(mp(j,-s[i])); } }else{ for(int j = pre[i] + 1 ; j <= i ; ++j){ g[i - j].pb(mp(j,s[i])); g[suf[i] - j].pb(mp(j,-s[i])); } } } for(int i = 0 ; i <= n ; ++i){ for(auto & c : f[i]){ U(c.first,c.second); } for(auto & c : query[i]){ ans[c.second] += Q(c.first.second) - Q(c.first.first-1); } } fill_n(bit,maxn,0); for(int i = 0 ; i <= n ; ++i){ for(auto & c : g[i]){ U(c.first,c.second); } for(auto & c : query[i]){ ans[c.second] += Q(c.first.second - i) - Q(c.first.first-i-1); } } for(int i = 1 ; i <= q ; ++i)cout << ans[i] << '\n'; }

Compilation message (stderr)

ho_t5.cpp: In function 'int main()':
ho_t5.cpp:32:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         freopen(taskname".INP","r",stdin);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
ho_t5.cpp:33:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         freopen(taskname".OUT","w",stdout);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...