結果
問題 | No.255 Splarrraaay スプラーレェーーイ |
ユーザー |
![]() |
提出日時 | 2016-02-25 12:56:40 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2,087 ms / 10,000 ms |
コード長 | 3,109 bytes |
コンパイル時間 | 2,593 ms |
コンパイル使用メモリ | 170,136 KB |
実行使用メモリ | 155,068 KB |
最終ジャッジ日時 | 2024-10-12 19:55:14 |
合計ジャッジ時間 | 22,310 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 10 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:75:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 75 | scanf("%lld%lld",&N,&Q); | ~~~~~^~~~~~~~~~~~~~~~~~ main.cpp:78:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 78 | scanf("%lld%lld%lld",&x[i],&l[i],&r[i]),x[i]--,r[i]++; | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include<bits/stdc++.h>using namespace std;#define int long longtypedef long long ll;typedef pair<int,int>pint;typedef vector<int>vint;typedef vector<pint>vpint;#define pb push_back#define mp make_pair#define fi first#define se second#define ln <<endl#define all(v) (v).begin(),(v).end()#define rep(i,n) for(int i=0;i<(n);i++)#define reps(i,f,n) for(int i=(f);i<(n);i++)#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++)template<class T,class U>void chmin(T &t,U f){if(t>f)t=f;}template<class T,class U>void chmax(T &t,U f){if(t<f)t=f;}struct segtree{static const int SEG=1<<19;vint sum,put,zero;vint g;void init(vint _g){g.resize(SEG);rep(i,_g.size())g[i]=_g[i];sum.assign(SEG*2,0);put.assign(SEG*2,0);zero.assign(SEG*2,0);}inline void push(int k,int l,int r){if(zero[k])sum[k]=0;sum[k]+=(g[r]-g[l])*put[k];if(k<SEG-1){if(zero[k]){put[k*2+1]=put[k*2+2]=0;zero[k*2+1]=zero[k*2+2]=1;}put[k*2+1]+=put[k];put[k*2+2]+=put[k];}put[k]=0;zero[k]=0;}void add(int a,int b,int t,int k=0,int l=0,int r=SEG){push(k,l,r);if(r<=a||b<=l)return;if(a<=l&&r<=b){if(t)put[k]++;else zero[k]=1,put[k]=0;push(k,l,r);return;}add(a,b,t,k*2+1,l,(l+r)/2);add(a,b,t,k*2+2,(l+r)/2,r);sum[k]=sum[k*2+1]+sum[k*2+2];}int get(int a,int b,int k=0,int l=0,int r=SEG){push(k,l,r);if(r<=a||b<=l)return 0;if(a<=l&&r<=b)return sum[k];return get(a,b,k*2+1,l,(l+r)/2)+get(a,b,k*2+2,(l+r)/2,r);}};const int SIZE=150000;int N,Q;int x[SIZE],l[SIZE],r[SIZE];segtree seg[5];int ans[5];const int mod=1000000000000000009ll;signed main(){scanf("%lld%lld",&N,&Q);vint press;rep(i,Q){scanf("%lld%lld%lld",&x[i],&l[i],&r[i]),x[i]--,r[i]++;press.pb(l[i]);press.pb(r[i]);}sort(all(press));press.erase(unique(all(press)),press.end());rep(i,Q){l[i]=lower_bound(all(press),l[i])-press.begin();r[i]=lower_bound(all(press),r[i])-press.begin();}rep(i,5)seg[i].init(press);rep(i,Q){if(~x[i]){rep(j,5){if(j!=x[i])seg[j].add(l[i],r[i],0);else seg[j].add(l[i],r[i],1);}}else{int ma=-114,v=-1,f=1;rep(j,5){int tmp=seg[j].get(l[i],r[i]);if(ma<tmp){ma=tmp;v=j;f=1;}else if(ma==tmp){f=0;}}if(f){ans[v]=(ans[v]+ma)%mod;}}}rep(i,5)ans[i]=(ans[i]+seg[i].get(0,press.size()-1))%mod;rep(i,5){if(i)printf(" ");printf("%lld",ans[i]);}puts("");return 0;}