結果
| 問題 | No.1338 Giant Class |
| コンテスト | |
| ユーザー |
mugen_1337
|
| 提出日時 | 2021-01-15 21:39:07 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,193 bytes |
| 記録 | |
| コンパイル時間 | 2,094 ms |
| コンパイル使用メモリ | 198,744 KB |
| 最終ジャッジ日時 | 2025-01-17 18:46:09 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 3 WA * 8 RE * 6 TLE * 2 MLE * 2 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#define ALL(x) begin(x),end(x)
#define rep(i,n) for(int i=0;i<(n);i++)
#define debug(v) cout<<#v<<":";for(auto x:v){cout<<x<<' ';}cout<<endl;
#define mod 1000000007
using ll=long long;
const int INF=1000000000;
const ll LINF=1001002003004005006ll;
int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
// ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
template<class T>bool chmax(T &a,const T &b){if(a<b){a=b;return true;}return false;}
template<class T>bool chmin(T &a,const T &b){if(b<a){a=b;return true;}return false;}
struct IOSetup{
IOSetup(){
cin.tie(0);
ios::sync_with_stdio(0);
cout<<fixed<<setprecision(12);
}
} iosetup;
template<typename T>
ostream &operator<<(ostream &os,const vector<T>&v){
for(int i=0;i<(int)v.size();i++) os<<v[i]<<(i+1==(int)v.size()?"":" ");
return os;
}
template<typename T>
istream &operator>>(istream &is,vector<T>&v){
for(T &x:v)is>>x;
return is;
}
#line 1 "SegmentTree/SegmentTree.cpp"
template<typename Monoid>
struct SegmentTree{
int sz;
vector<Monoid> seg;
Monoid M0;// モノイドの元
using F=function<Monoid(Monoid,Monoid)>;
F f;
SegmentTree(int n,Monoid M0,F f):M0(M0),f(f){
sz=1;
while(sz<n)sz<<=1;
seg.assign(2*sz,M0);
}
void set(int k,Monoid x){
seg[k+sz]=x;
}
void build(){
for(int k=sz-1;k>0;k--) seg[k]=f(seg[2*k],seg[2*k+1]);
}
void update(int k,Monoid x){
k+=sz;
seg[k]=x;
k>>=1;
for(;k;k>>=1) seg[k]=f(seg[2*k],seg[2*k+1]);
}
Monoid query(int a,int b,int k=1,int l=0,int r=-1){
if(r==-1) r=sz;
if(a<=l and r<=b) return seg[k];
if(b<=l or r<=a) return M0;
Monoid L=query(a,b,2*k,l,(l+r)/2);
Monoid R=query(a,b,2*k+1,(l+r)/2,r);
return f(L,R);
}
};
signed main(){
int h,w,q;cin>>h>>w>>q;
SegmentTree<int> seg(w,0,[](int a,int b){return a+b;});
vector<int> v(w,h);
rep(i,w) seg.set(i,v[i]);
seg.build();
while(q--){
int y,x;cin>>y>>x;x--;
if(chmin(v[x],y-1)) seg.update(x,v[x]);
cout<<seg.query(0,w)<<endl;
}
return 0;
}
mugen_1337