結果
問題 |
No.404 部分門松列
|
ユーザー |
![]() |
提出日時 | 2025-03-20 20:57:54 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 223 ms / 2,000 ms |
コード長 | 2,417 bytes |
コンパイル時間 | 2,784 ms |
コンパイル使用メモリ | 197,644 KB |
実行使用メモリ | 22,780 KB |
最終ジャッジ日時 | 2025-03-20 20:58:10 |
合計ジャッジ時間 | 9,810 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 31 |
コンパイルメッセージ
main.cpp: In function ‘void Tree::init()’: main.cpp:57:21: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister] 57 | For(i,1,cnt) | ^ main.cpp:13:37: note: in definition of macro ‘For’ 13 | #define For(i,l,r) for(register int i=l;i<=r;i++) | ^ main.cpp: In function ‘int main()’: main.cpp:75:13: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister] 75 | For(i,1,n){ | ^ main.cpp:13:37: note: in definition of macro ‘For’ 13 | #define For(i,l,r) for(register int i=l;i<=r;i++) | ^ main.cpp:81:13: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister] 81 | For(i,1,n) | ^ main.cpp:13:37: note: in definition of macro ‘For’ 13 | #define For(i,l,r) for(register int i=l;i<=r;i++) | ^ main.cpp:83:13: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister] 83 | For(i,1,n){ | ^ main.cpp:13:37: note: in definition of macro ‘For’ 13 | #define For(i,l,r) for(register int i=l;i<=r;i++) | ^ main.cpp:90:14: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister] 90 | _For(i,1,n){ | ^ main.cpp:14:38: note: in definition of macro ‘_For’ 14 | #define _For(i,l,r) for(register int i=r;i>=l;i--) | ^ main.cpp:97:13: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister] 97 | For(i,1,n){ | ^ main.cpp:13:37: note: in definition of macro ‘For’ 13 | #define For(i,l,r) for(register int i=l;i<=r;i++) | ^ main.cpp:102:13: warning:
ソースコード
#include<bits/stdc++.h> #define Add(x,y) (x+y>=mod)?(x+y-mod):(x+y) #define lowbit(x) x&(-x) #define pi pair<ll,ll> #define pii pair<ll,pair<ll,ll>> #define iip pair<pair<ll,ll>,ll> #define ppii pair<pair<ll,ll>,pair<ll,ll>> #define fi first #define se second #define full(l,r,x) for(auto it=l;it!=r;it++) (*it)=x #define Full(a) memset(a,0,sizeof(a)) #define open(s1,s2) freopen(s1,"r",stdin),freopen(s2,"w",stdout); #define For(i,l,r) for(register int i=l;i<=r;i++) #define _For(i,l,r) for(register int i=r;i>=l;i--) using namespace std; typedef double db; typedef unsigned long long ull; typedef long long ll; bool Begin; const ll N=2e5+10; inline ll read(){ ll x=0,f=1; char c=getchar(); while(c<'0'||c>'9'){ if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9'){ x=(x<<1)+(x<<3)+(c^48); c=getchar(); } return x*f; } inline void write(ll x){ if(x<0){ putchar('-'); x=-x; } if(x>9) write(x/10); putchar(x%10+'0'); } ll n,q,l,r,sum,cnt; ll a[N],t[N],s1[N],s2[N],p1[N],p2[N],p3[N],q1[N],q2[N],q3[N],s[N],h[N]; void insert(ll x){ s1[x]++; sum+=s2[x]; } void del(ll x){ s2[x]--; sum-=s1[x]; } namespace Tree{ ll a[N]; void init(){ For(i,1,cnt) a[i]=0; } void add(ll x,ll v){ for(int i=x;i<=cnt;i+=lowbit(i)) a[i]+=v; } ll query(ll x){ ll sum=0; for(int i=x;i;i-=lowbit(i)) sum+=a[i]; return sum; } }; bool End; int main(){ // open("sequence.in","sequence.out"); n=read(); For(i,1,n){ a[i]=read(); h[++cnt]=a[i]; } sort(h+1,h+cnt+1); cnt=unique(h+1,h+cnt+1)-(h+1); For(i,1,n) a[i]=lower_bound(h+1,h+cnt+1,a[i])-h; For(i,1,n){ p1[i]=Tree::query(a[i]-1); p2[i]=i-Tree::query(a[i])-1; p3[i]=i-1-p1[i]-p2[i]; Tree::add(a[i],1); } Tree::init(); _For(i,1,n){ q1[i]=Tree::query(a[i]-1); q2[i]=n-i-Tree::query(a[i]); q3[i]=n-i-q1[i]-q2[i]; Tree::add(a[i],1); s2[a[i]]++; } For(i,1,n){ del(a[i]); t[i]=sum; insert(a[i]); } For(i,2,n-1){ // cerr<<p1[i]<<' '<<q1[i]<<' '<<p2[i]<<' '<<q2[i]<<' '<<p3[i]<<' '<<q3[i]<<' '<<t[i]<<'\n'; sum=p1[i]*q1[i]+p2[i]*q2[i]-t[i]+p3[i]*q3[i]; s[a[i]]+=sum; // cerr<<sum<<'\n'; } For(i,1,cnt+2) s[i]+=s[i-1]; q=read(); while(q--){ l=read(),r=read(); l=lower_bound(h+1,h+cnt+1,l)-h; r=upper_bound(h+1,h+cnt+1,r)-(h+1); write(s[r]-s[l-1]); putchar('\n'); } cerr<<'\n'<<abs(&Begin-&End)/1048576<<"MB"; return 0; }