結果
| 問題 |
No.284 門松と魔法(2)
|
| コンテスト | |
| ユーザー |
snuke
|
| 提出日時 | 2015-09-18 23:17:58 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,126 bytes |
| コンパイル時間 | 655 ms |
| コンパイル使用メモリ | 83,916 KB |
| 実行使用メモリ | 19,968 KB |
| 最終ジャッジ日時 | 2024-07-19 07:10:23 |
| 合計ジャッジ時間 | 2,716 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 25 WA * 15 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:80:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
80 | scanf("%d",&n);
| ~~~~~^~~~~~~~~
main.cpp:81:17: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
81 | rep(i,n) scanf("%d",&ax[i]);
| ~~~~~^~~~~~~~~~~~~
ソースコード
#include <cstdio>
#include <algorithm>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <string>
#include <string.h>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <map>
#include <set>
#include <iostream>
#include <sstream>
#include <numeric>
#include <cctype>
#define fi first
#define se second
#define rep(i,n) for(int i = 0; i < n; ++i)
#define rrep(i,n) for(int i = 1; i <= n; ++i)
#define drep(i,n) for(int i = n-1; i >= 0; --i)
#define gep(i,g,j) for(int i = g.head[j]; i != -1; i = g.e[i].next)
#define each(it,c) for(__typeof((c).begin()) it=(c).begin();it!=(c).end();it++)
#define rng(a) a.begin(),a.end()
#define maxs(x,y) x = max(x,y)
#define mins(x,y) x = min(x,y)
#define pb push_back
#define sz(x) (int)(x).size()
#define pcnt __builtin_popcount
#define snuke srand((unsigned)clock()+(unsigned)time(NULL));
using namespace std;
typedef long long int ll;
typedef pair<int,int> P;
typedef vector<int> vi;
typedef vector<vi> vvi;
inline int in() { int x; scanf("%d",&x); return x;}
inline void priv(vi a) { rep(i,sz(a)) printf("%d%c",a[i],i==sz(a)-1?'\n':' ');}
const int MX = 100005, INF = 1000010000;
const int MY = 1000005;
const ll LINF = 1000000000000000000ll;
const double eps = 1e-10;
int n;
int ax[MX];
// Segment tree (RMQ type)
struct seg {
vector<int> d; int x2;
seg(){}
seg(int mx){ x2 = 1; while(x2 < mx) x2 <<= 1; d.resize(x2<<1);}
void add(int i, int x=0){
for(i+=x2;i;i>>=1) d[i] = max(d[i],x); // update
}
int get(int a, int b, int i=1, int l=0, int r=-1){
if (r == -1) r = x2;
if(a <= l && r <= b) return d[i];
int c = (l+r)>>1; int res = 0;
if(a < c) res = max(res,get(a,b,i<<1,l,c));
if(c < b) res = max(res,get(a,b,i<<1|1,c,r));
return res;
}
};
//
int solve() {
seg dl(MY), dr(MY);
rep(i,n) {
int a = ax[i];
int ml = dl.get(0,a);
int mr = dr.get(a+1,MY);
dl.add(a,mr+1);
dr.add(a,ml+1);
}
return max(dl.get(0,MY),dr.get(0,MY));
}
int main() {
scanf("%d",&n);
rep(i,n) scanf("%d",&ax[i]);
int ans = solve();
if (ans < 3) ans = 0;
cout<<ans<<endl;
return 0;
}
snuke