結果
問題 | No.2101 [Cherry Alpha N] ずっとこの数列だったらいいのに |
ユーザー |
|
提出日時 | 2022-10-07 11:44:14 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 653 ms / 6,000 ms |
コード長 | 1,499 bytes |
コンパイル時間 | 10,085 ms |
コンパイル使用メモリ | 337,164 KB |
実行使用メモリ | 90,996 KB |
最終ジャッジ日時 | 2024-06-26 13:29:41 |
合計ジャッジ時間 | 33,394 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 42 |
ソースコード
#include "testlib.h" #include <bits/stdc++.h> #include <atcoder/segtree> using namespace std; using namespace atcoder; using pl=pair<long long,long long>; using ppl=pair<pl,pl>; pl op(pl a,pl b){ return {a.first+b.first,a.second+b.second}; } pl e(){return {0,0};} int main(){ registerValidation(); long long n=inf.readLong(1ll,200000ll);inf.readEoln(); vector<pl> init(n); vector<ppl> event; for(int i=0;i<n;i++){ long long a=inf.readLong(0ll,1000000000ll);inf.readSpace(); long long t=inf.readLong(1ll,1000000000ll);inf.readEoln(); init[i]={0,a}; if(a!=0){ event.push_back({{t,-i},{-1,t+a-1}}); // if a==1 this comes first event.push_back({{t+a-1,-i},{0,0}}); // if a==1 this comes second } } long long q=inf.readLong(1ll,200000ll);inf.readEoln(); for(int i=1;i<=q;i++){ long long d=inf.readLong(0ll,2000000000ll);inf.readSpace(); long long l=inf.readLong(1ll,n);inf.readSpace(); long long r=inf.readLong(l,n);inf.readEoln(); event.push_back({{d,i},{l,r}}); } inf.readEof(); segtree<pl,op,e> seg(init); sort(event.begin(),event.end()); vector<long long> res(q+1); for(auto &nx : event){ long long x=nx.first.first; long long knd=nx.first.second; long long l=nx.second.first; long long r=nx.second.second; if(knd<=0){ seg.set(-knd,{l,r}); } else{ pl f=seg.prod(l-1,r); res[knd]=f.first*x+f.second; } } for(int i=1;i<=q;i++){cout << res[i] << "\n";} return 0; }