結果
問題 | No.801 エレベーター |
ユーザー |
![]() |
提出日時 | 2019-03-18 20:54:45 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 1,963 ms / 2,000 ms |
コード長 | 1,210 bytes |
コンパイル時間 | 1,525 ms |
コンパイル使用メモリ | 158,320 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-19 03:52:20 |
合計ジャッジ時間 | 30,112 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 26 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:39:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 39 | scanf("%d %d %d",&N,&M,&K); | ~~~~~^~~~~~~~~~~~~~~~~~~~~ main.cpp:41:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 41 | scanf("%d %d",L+i,R+i); | ~~~~~^~~~~~~~~~~~~~~~~
ソースコード
#include <bits/stdc++.h>typedef long long ll;#define FOR(i,a,b) for(int i=(a);i<(b);i++)#define REP(i,a) FOR(i,0,a)using namespace std;const int MAX_N=3000,MAX_M=3000;const ll MOD=1e9+7;int N,M,K,L[MAX_M],R[MAX_M];int n2;ll dp[MAX_N],laz[MAX_N<<2],psm[MAX_N+1];void madd(ll &a,ll b){a+=b;if(a>=MOD){a-=MOD;}}void lazpro(int k,int a,int b){if(laz[k]>0){if(b-a>1){madd(laz[(k<<1)+1],laz[k]);madd(laz[(k<<1)+2],laz[k]);}}}void add(int l,int r,ll x,int k,int a,int b){if(r<=a || b<=l){return;}if(l<=a && b<=r){madd(laz[k],x);}else{add(l,r,x,(k<<1)+1,a,(a+b)>>1);add(l,r,x,(k<<1)+2,(a+b)>>1,b);}}int main(){scanf("%d %d %d",&N,&M,&K);REP(i,M){scanf("%d %d",L+i,R+i);L[i]--;}n2=1;while(n2<N) n2<<=1;dp[0]=1;REP(i,K){memset(laz,0,sizeof(laz));REP(j,N){psm[j+1]=psm[j]+dp[j];if(psm[j+1]>=MOD){psm[j+1]-=MOD;}}REP(j,M){ll x=psm[R[j]]-psm[L[j]];if(x<0){x+=MOD;}add(L[j],R[j],x,0,0,n2);}int w=n2,a=0,k=0;while(w>0){if(a==n2){a=0;w>>=1;continue;}lazpro(k++,a,a+w);a+=w;}REP(j,N){dp[j]=laz[n2-1+j];}}printf("%lld\n",dp[N-1]);}