結果
問題 | No.404 部分門松列 |
ユーザー | vjudge1 |
提出日時 | 2024-10-15 22:13:30 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 193 ms / 2,000 ms |
コード長 | 2,417 bytes |
コンパイル時間 | 2,372 ms |
コンパイル使用メモリ | 206,992 KB |
実行使用メモリ | 22,272 KB |
最終ジャッジ日時 | 2024-10-15 22:13:42 |
合計ジャッジ時間 | 10,963 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 2 ms
5,248 KB |
testcase_04 | AC | 2 ms
5,248 KB |
testcase_05 | AC | 2 ms
5,248 KB |
testcase_06 | AC | 2 ms
5,248 KB |
testcase_07 | AC | 2 ms
5,248 KB |
testcase_08 | AC | 2 ms
5,248 KB |
testcase_09 | AC | 1 ms
5,248 KB |
testcase_10 | AC | 2 ms
5,248 KB |
testcase_11 | AC | 1 ms
5,248 KB |
testcase_12 | AC | 2 ms
5,248 KB |
testcase_13 | AC | 88 ms
10,496 KB |
testcase_14 | AC | 29 ms
11,648 KB |
testcase_15 | AC | 66 ms
9,216 KB |
testcase_16 | AC | 86 ms
17,024 KB |
testcase_17 | AC | 129 ms
15,872 KB |
testcase_18 | AC | 66 ms
5,376 KB |
testcase_19 | AC | 43 ms
8,960 KB |
testcase_20 | AC | 42 ms
16,768 KB |
testcase_21 | AC | 121 ms
16,000 KB |
testcase_22 | AC | 82 ms
5,504 KB |
testcase_23 | AC | 67 ms
17,536 KB |
testcase_24 | AC | 129 ms
17,536 KB |
testcase_25 | AC | 193 ms
22,272 KB |
testcase_26 | AC | 176 ms
20,352 KB |
testcase_27 | AC | 16 ms
5,248 KB |
testcase_28 | AC | 110 ms
9,344 KB |
testcase_29 | AC | 142 ms
18,304 KB |
testcase_30 | AC | 89 ms
9,856 KB |
testcase_31 | AC | 9 ms
5,248 KB |
testcase_32 | AC | 120 ms
16,640 KB |
testcase_33 | AC | 140 ms
12,416 KB |
testcase_34 | AC | 103 ms
11,904 KB |
コンパイルメッセージ
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: ISO C++17 does not allow 'register' storage class specif
ソースコード
#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; }