제출 #1209814

#제출 시각아이디문제언어결과실행 시간메모리
1209814cpdreamerFancy Fence (CEOI20_fancyfence)C++17
100 / 100
22 ms13708 KiB
#include <bits/stdc++.h>
using namespace std;
const long long  INF = 1e17;
typedef long long ll;
const ll MOD=1e9+7;
#define P pair
#define S second
#define F first
#define pb push_back
#define V vector
void file() {
    freopen("input.txt.txt", "r", stdin);
    freopen("output.txt.txt", "w", stdout);
}
bool flag;
int state[(int)2e5+1];
set<int>adj[(int)2e5+1];
ll g( ll a){
    if(a%2==0){
        ll x=(a/2)%MOD;
        ll y=(a+1)%MOD;
        return (x*y)%MOD;
    }
    ll x=a%MOD;
    ll y=((a+1)/2)%MOD;
    return (x*y)%MOD;
}
ll f(ll a,ll b){
    ll p=(g(a)%MOD)*(g(b)%MOD)%MOD;
    return p;
}
ll md(ll x){
    return ((x%MOD)+MOD)%MOD;
}
void solve(){
    int n;
    cin>>n;
    ll h[n],w[n];
    for(int i=0;i<n;i++){
        cin>>h[i];
    }
    for(int i=0;i<n;i++){
        cin>>w[i];
    }
    ll ans=0;
    ll c=0;
    for(int i=0;i<n;i++) {
        ans += f(h[i], w[i]);
        ans%= MOD;
    }
    stack<P<P<ll,ll>,ll>>st;
    st.push({{0LL,0LL},0LL});
    for(int i=0;i<n;i++){
        ll s=0;
        while(h[i]<st.top().F.F){
            s+=st.top().F.S;
            s%=MOD;
            c-=((g(st.top().F.F)%MOD)*(st.top().F.S%MOD))%MOD;
            c=md(c);
            ans+=((c%MOD)*(st.top().F.S%MOD))%MOD;
            ans%=MOD;
            c-=((g(st.top().F.F)%MOD)*(st.top().S%MOD))%MOD;
            s+=st.top().S%MOD;
            s%=MOD;
            c=md(c);
            st.pop();
        }
        c+=((s+w[i])%MOD)*(g(h[i])%MOD)%MOD;
        c=md(c);
        st.push({{h[i],w[i]},s});
    }
    while(st.size()>1){
        c-=((g(st.top().F.F)%MOD)*(st.top().F.S%MOD))%MOD;
        c=md(c);
        ans+=((c%MOD)%MOD*(st.top().F.S)%MOD)%MOD;
        ans%=MOD;
        c-=((g(st.top().F.F)%MOD)*(st.top().S%MOD))%MOD;
        c=md(c);
        st.pop();
    }
    cout<<md(ans)<<endl;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    //file();
    solve();
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

fancyfence.cpp: In function 'void file()':
fancyfence.cpp:12:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 |     freopen("input.txt.txt", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fancyfence.cpp:13:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   13 |     freopen("output.txt.txt", "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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...