結果
問題 | No.833 かっこいい電車 |
ユーザー |
![]() |
提出日時 | 2019-05-24 22:37:04 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
TLE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 2,115 bytes |
コンパイル時間 | 1,282 ms |
コンパイル使用メモリ | 162,388 KB |
実行使用メモリ | 20,748 KB |
最終ジャッジ日時 | 2024-07-02 03:45:02 |
合計ジャッジ時間 | 8,002 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 2 |
other | TLE * 1 -- * 29 |
ソースコード
#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int> pii;typedef pair<pii,int> ppii;typedef pair<int,pii> pipi;typedef pair<ll,ll> pll;typedef pair<ll,pll> plpl;typedef tuple<ll,ll,ll> tl;ll mod=1000000007;ll mod2=998244353;ll inf=1000000000000000000;#define rep(i,m,n) for(int i=m;i<n;i++)#define rrep(i,n,m) for(int i=n;i>=m;i--)ll lmax(ll a,ll b){if(a<b)return b;else return a;}ll lmin(ll a,ll b){if(a<b)return a;else return b;}ll par[200010];ll par2[200010];void init(ll n){for(int i=0;i<n;i++){par[i]=i;par2[i]=i;}}ll root(ll n){if(par[n]==n)return n;return par[n]=root(n+1);}ll root2(ll n){if(par2[n]==n)return n;return par2[n]=root2(n-1);}void unit(ll a,ll b){a=root(a);b=root(b);if(a==b)return;if(a<b){par[a]=b;}else par[b]=a;a=root2(a);b=root2(b);if(a<b){par2[b]=a;}else par2[a]=b;}void sepa(ll a,ll b){if(a<b){par[a]=a;par2[b]=b;}else{par[b]=b;par2[a]=a;}}ll bit[400010];ll u;void bitinit(ll n){rep(i,0,69){ll y=pow(2,i);if(y>=n){u=y;break;}}fill(bit,bit+u+10,0);}void add(ll n,ll x){ll i=n;bit[i]+=x;while(i<u){i+=i&(-i);bit[i]+=x;}}ll sum(ll n){ll i=n;ll ret=0;while(i>0){ret+=bit[i];i-=i&(-i);}return ret;}int main(){ll n,q;cin>>n>>q;ll a[n];rep(i,0,n)cin>>a[i];init(n+1);bitinit(n+1);rep(i,0,n)add(i+1,a[i]);rep(i,0,q){ll c,x;cin>>c>>x;if(c==1){unit(x,x+1);}if(c==2){sepa(x,x+1);}if(c==3){add(x,1);}if(c==4){ll l=root2(x);ll r=root(x);ll e=sum(r)-sum(l-1);cout<<e<<endl;}//cout<<root(2)<<" "<<root2(2)<<endl;}//cout<<par2[1]<<" "<<par2[2]<<endl;}