Submission #1119627

#TimeUsernameProblemLanguageResultExecution timeMemory
1119627squatrianFancy Fence (CEOI20_fancyfence)C++17
0 / 100
2 ms456 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; using std::mt19937_64; using std::random_device; using std::uniform_int_distribution; #include <numeric> #define ff first #define ss second #define int long long #define pb push_back #define mp make_pair #define pii pair<int,int> #define vi vector<int> #define mii map<int,int> #define pqb priority_queue<int> #define pqs priority_queue<int,vi,greater<int> > #define setbits(x) __builtin_popcountll(x) #define zrobits(x) __builtin_ctzll(x) #define mod 1000000007 #define inf 1e18 #define ps(x,y) fixed<<setprecision(y)<<x #define mk(arr,n,type) type *arr=new type[n]; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds; void c_p_c() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #ifndef ONLINE_JUDGE freopen("art2.in", "r", stdin); freopen("art2.out", "w", stdout); #endif } int dx[] = {1, -1, 0, 0}; int dy[] = {0, 0, 1, -1}; int exp(int x, int n, int m) { if(x == 0 and n == 0) return 1; x %= m; int res = 1; while (n > 0) { if (n % 2 == 1) { res = res * x % m; } x = x * x % m; n /= 2; } return res; } int modinv(int n) { int r = 1; int p = mod - 2; while (p > 0) { if (p % 2 == 1) { r = (r * n) % mod; } n = (n * n) % mod; p /= 2; } return r; } int mul(int a,int b){ return ((a*b)%mod); } int val(int a){ return ((((a*(a+1))%mod)*modinv(2))%mod); } signed main() { int t=1; // c_p_c(); // cin >> t; while(t--){ int n; cin >> n; vector<int> h(n+1),w(n+1); for(int i = 1 ; i <= n; i++) cin >> h[i]; for(int i = 1 ; i <= n; i++) cin >> w[i]; stack<pair<int,int>> s; int ans = 0; for(int i = 1 ; i <= n; i++){ if(s.empty() or s.top().ff <= h[i]){ if(!s.empty() and s.top().ff == h[i]){ s.top().ss += w[i]; } else{ s.push({h[i],w[i]}); } } else{ int width = 0; while(!s.empty() and s.top().ff > h[i]){ ans = (ans + mul(val(s.top().ff),val(width+s.top().ss)))%mod; ans = (ans - mul(val(s.top().ff),val(width))+mod)%mod; width += s.top().ss; s.pop(); } if(!s.empty() and s.top().ff == h[i]){ s.top().ss += w[i]; } else{ s.push({h[i],w[i]}); } } } int width = 0; while(!s.empty()){ ans = (ans + mul(val(s.top().ff),val(width+s.top().ss)))%mod; ans = (ans - mul(val(s.top().ff),val(width))+mod)%mod; width += s.top().ss; s.pop(); } cout<<ans<<endl; } return 0; }

Compilation message (stderr)

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