Submission #906581

#TimeUsernameProblemLanguageResultExecution timeMemory
906581LudisseyFancy Fence (CEOI20_fancyfence)C++14
100 / 100
31 ms6004 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int n,m; int mod=1e9+7; int MOD(int x) { return (x+mod)%mod; } int clc(int x, int y) { x=MOD(x); y=MOD(y); return (((((x*(x+1)))/(long long)2)%mod)*((((y*(y+1)))/(long long)2)%mod))%mod; //non cest bon } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n; vector<int> h(n+1); vector<int> w(n+1); int totalw=0; for (int i = 1; i <= n; i++) cin>>h[i]; for (int i = 1; i <= n; i++) cin >> w[i]; h[0]=0; stack<pair<int,int>> stck; int outp=0; stck.push({h[1],w[1]}); for (int i = 2; i <= n; i++) { int hght=stck.top().first; int wdht=stck.top().second; stck.pop(); if(hght==h[i]) { wdht+=w[i]; stck.push({hght, wdht}); } else if(hght<h[i]){ stck.push({hght, wdht}); stck.push({h[i], w[i]}); }else{ bool b=true; vector<pair<int,int>> sb4; int copyw=w[i]; while(hght>h[i]){ w[i]=(w[i]+wdht)%mod; sb4.push_back({wdht,hght}); if(!b) stck.pop(); if(stck.empty()) break; b=false; hght=stck.top().first; wdht=stck.top().second; } int totw=w[i]-copyw; int last=0; for (int j = sb4.size()-1; j >= 0; j--) { int height=sb4[j].second, width=sb4[j].first; int side1=clc(totw,height)-clc(totw,last); last=height; side1=MOD(side1); // outp=MOD(outp+side1); //jai pas compris totw-=width; } int min=clc(MOD(w[i]-copyw),h[i]); outp=MOD(outp-min); stck.push({h[i], w[i]}); } } h.clear(); w.clear(); int newN=stck.size(); h.resize(newN); w.resize(newN); totalw=0; for (int i = newN; i > 0; i--) { h[i]=stck.top().first; w[i]=stck.top().second; totalw=(totalw+w[i])%mod; stck.pop(); } h[0]=0; for (int i = 1; i <= newN; i++) { int side1=clc(totalw,h[i])-clc(totalw,h[i-1]); side1=MOD(side1); // outp=MOD(outp+side1); //jai pas compris totalw-=w[i]; } cout << outp << "\n"; return 0; }
#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...