結果
| 問題 |
No.1079 まお
|
| コンテスト | |
| ユーザー |
tko919
|
| 提出日時 | 2020-05-18 15:17:59 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 536 ms / 2,000 ms |
| コード長 | 1,322 bytes |
| コンパイル時間 | 1,847 ms |
| コンパイル使用メモリ | 180,168 KB |
| 実行使用メモリ | 11,056 KB |
| 最終ジャッジ日時 | 2024-10-01 22:42:25 |
| 合計ジャッジ時間 | 11,191 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 30 |
ソースコード
#define _USE_MATH_DEFINES
#include <bits/stdc++.h>
using namespace std;
//template
#define rep(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define ALL(v) (v).begin(),(v).end()
typedef long long int ll;
const int inf = 0x3fffffff; const ll INF = 0x1fffffffffffffff; const double eps=1e-12;
template<typename T>inline bool chmax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
template<typename T>inline bool chmin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
//end
int n,k; vector<int> a;
ll f(vector<int> b,vector<int> c){
int idx=0; ll res=0;
int mi=inf,cnt=1;
map<int,ll> vs,ss;
rep(i,0,b.size()){
if(b[i]==mi)cnt++;
else if(b[i]<mi){
mi=b[i]; cnt=1;
}
if(cnt>1)continue;
while(idx<c.size()){
int v=c[idx];
if(v>mi){
vs[v]++; ss[v]+=idx+1;
}
else break;
idx++;
}
int key=k-b[i];
if(vs.count(key)){
res+=vs[key]*(i+1)+ss[key];
}
} return res;
}
ll rec(int lb,int rb){
if(rb-lb==1)return a[lb]*2==k;
int m=(lb+rb)/2;
ll res=rec(lb,m)+rec(m,rb);
vector<int> x(a.begin()+lb,a.begin()+m),y(a.begin()+m,a.begin()+rb);
reverse(ALL(x)); res+=f(x,y)+f(y,x); return res;
}
int main(){
cin>>n>>k; a.resize(n);
rep(i,0,n)cin>>a[i];
cout<<rec(0,n)<<endl;
return 0;
}
tko919