結果
問題 | No.2101 [Cherry Alpha N] ずっとこの数列だったらいいのに |
ユーザー |
![]() |
提出日時 | 2022-10-15 00:28:55 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 518 ms / 6,000 ms |
コード長 | 2,487 bytes |
コンパイル時間 | 2,996 ms |
コンパイル使用メモリ | 259,708 KB |
実行使用メモリ | 30,812 KB |
最終ジャッジ日時 | 2024-06-26 18:32:30 |
合計ジャッジ時間 | 24,123 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 42 |
ソースコード
#include <bits/stdc++.h>using namespace std;using ll = long long;using ull = unsigned long long;using ld = long double;template<class t> using vc = vector<t>;template<class t> using vvc = vc<vc<t>>;using pi = pair<int,int>;using pl = pair<ll,ll>;using vi = vc<int>;using vvi = vvc<int>;using vl = vc<ll>;using vvl = vvc<ll>;#define rep(i,a,b) for (int i = (int)(a); i < (int)(b); i++)#define irep(i,a,b) for (int i = (int)(a); i > (int)(b); i--)#define all(a) a.begin(),a.end()#define print(n) cout << n << '\n'#define pritn(n) print(n)#define printv(n,a) {copy(all(n),ostream_iterator<a>(cout," ")); cout<<"\n";}#define printvv(n,a) {for(auto itr:n) printv(itr,a);}#define rup(a,b) (a+b-1)/b#define input(A,N) rep(i,0,N) cin>>A[i]#define chmax(a,b) a = max(a,b)#define chmin(a,b) a = min(a,b)template< typename T >struct BIT{int n;vector<T> data;BIT(int n):n(n),data(n+1,0){}void add(int i,T x){i++;while(i<=n){data[i] += x;i += i & (-i);}}//sum of [l,r)T sum(int l,int r){return sum(r-1)-sum(l-1);}T sum(int i){i++;T now = 0;while(i>0){now += data[i];i -= i & (-i);}return now;}};int main(){cout << fixed << setprecision(15);int n;cin>>n;BIT<ll> b1(n),b2(n);using pp = pair<ll,pair<int,int>>;vc<pp> dd;vl a(n);vl t(n);rep(i,0,n){cin>>a[i]>>t[i];b1.add(i,a[i]);dd.emplace_back(t[i]-1,pi(0,i));dd.emplace_back(t[i]+a[i]-1,pi(1,i));}int q;cin>>q;vl tt(q),l(q),r(q);rep(i,0,q){cin>>tt[i]>>l[i]>>r[i];l[i]--;dd.emplace_back(tt[i],pi(2,i));}sort(all(dd));vl ans(q);//a[i] - (nt - t[i] + 1)rep(i,0,dd.size()){pp now = dd[i];int qq = now.second.first;ll nn = now.first;int ni = now.second.second;//cout<<ni<<" "<<nn<<" "<<qq<<endl;if(qq==0){b1.add(ni,nn);b2.add(ni,-1);}else if(qq==1){b1.add(ni,-(nn-a[ni]));b1.add(ni,-a[ni]);b2.add(ni,1);}else{//cout<<l[ni]<<" "<<r[ni]<<endl;ll sum = b1.sum(l[ni],r[ni]) + nn*b2.sum(l[ni],r[ni]);ans[ni] = sum;}}rep(i,0,q) print(ans[i]);//system("pause");return 0;}