結果
| 問題 | No.728 ギブ and テイク |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-01-25 12:46:39 |
| 言語 | C++14 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 235 ms / 3,000 ms |
| コード長 | 1,027 bytes |
| 記録 | |
| コンパイル時間 | 1,587 ms |
| コンパイル使用メモリ | 189,564 KB |
| 実行使用メモリ | 34,656 KB |
| 最終ジャッジ日時 | 2026-01-25 12:46:45 |
| 合計ジャッジ時間 | 6,194 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 30 |
ソースコード
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=300010;
const int INF=0x3f3f3f3f3f3f3f3f;
int n;
int ans;
int a[N],l[N],r[N];
vector<pair<int,int> >Q[N];
struct BIT{
int t[N];
int lowbit(int x){return x&-x;}
void update(int x,int y){
for(int i=x;i<=n;i+=lowbit(i))t[i]+=y;
return;
}
int ask(int x){
int res=0;
for(int i=x;i>=1;i-=lowbit(i))res+=t[i];
return res;
}
int query(int l,int r){
return ask(r)-ask(l-1);
}
}T;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++){
cin>>l[i]>>r[i];
l[i]=a[i]-l[i];
r[i]=a[i]+r[i];
l[i]=lower_bound(a+1,a+n+1,l[i])-a;
r[i]=upper_bound(a+1,a+n+1,r[i])-a-1;
}
for(int i=1;i<=n;i++){
//[x,i) r[j]>=i
Q[l[i]-1].push_back(make_pair(i,-1));
Q[i-1].push_back(make_pair(i,1));
}
for(int i=1;i<=n;i++){
T.update(r[i],1);
for(auto q:Q[i]){
int tar=q.first;
int s=q.second;
ans+=s*T.query(tar,n);
}
}
cout<<ans<<"\n";
return 0;
}
vjudge1