Submission #906566

#TimeUsernameProblemLanguageResultExecution timeMemory
906566LudisseyFancy Fence (CEOI20_fancyfence)C++14
43 / 100
25 ms4956 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; while(hght>h[i]){ outp=MOD(outp+MOD(clc(hght,wdht)-clc(h[i],wdht))); w[i]+=wdht; if(!b) stck.pop(); if(stck.empty()) break; b=false; hght=stck.top().first; wdht=stck.top().second; } 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...