Submission #709522

# Submission time Handle Problem Language Result Execution time Memory
709522 2023-03-13T20:36:33 Z epicci23 Group Photo (JOI21_ho_t3) C++17
100 / 100
752 ms 196428 KB
#include "bits/stdc++.h"
#pragma optimize ("Bismillahirrahmanirrahim")
using namespace std;
#define pb push_back
#define ff first
#define ss second
#define endl "\n" 
#define int long long
#define double long double
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define what_is(x) cerr << #x << " is " << x << endl;
//#define m (l+r)/2
constexpr int N=200005;
constexpr int MOD=1000000007;
constexpr int  INF2 = LLONG_MAX;
constexpr int INF=(int)1e18;
constexpr int LOG=30;
typedef pair<int,int> pii;
typedef tuple<int,int,int> tp;
typedef priority_queue<pii,vector<pii>,greater<pii>> min_pq;
typedef priority_queue<pii> max_pq;
typedef long long ll;
//to think//
/*
 * graph approach
 * dp
 * dividing the problem to smaller statements
 * finding the real constraint
 * sqrt decomposition
 * greedy approach
 * pigeonhole principle
 * rewriting the problem/equality 
 * bitwise approaches
 * binary search if monotonic
 * divide and conquer
 * combinatorics
 * inclusion - exclusion
 * think like bfs
*/



inline int in()
{
  int x;cin >> x;
  return x;
}

inline string in2()
{
  string x;cin >> x;
  return x;
}


void solve()
{
  int n=in();
  int arr[n+2];
  for(int i=1;i<=n;i++) arr[i]=in();
  int dp[n+2];
  for(int i=1;i<=n;i++) dp[i]=INF;
  dp[0]=0;

  int pre[n+2][n+2];
  
  for(int i=0;i<=n;i++) pre[0][i]=pre[i][0]=0;

  vector<int> mark(n+2,0);
  
  for(int i=1;i<=n;i++)
  {
    int cur=0;
    for(int j=1;j<=n;j++)
    {
      cur+=mark[j];
      pre[arr[i]][j]=cur;
     // cout << "i: " << arr[i] << " " <<" j: " << j << " " << pre[arr[i]][j] << endl;
    }
    mark[arr[i]]=1;
  }
   
  int pre2[n+2];
  pre2[0]=0;
  for(int i=1;i<=n;i++) pre2[i]=pre2[i-1] + pre[i][i];

  for(int j=1;j<=n;j++)
    for(int i=1;i<=n;i++) 
     pre[i][j]+=pre[i-1][j];
  
  for(int i=0;i<n;i++)
  {
    for(int j=i+1;j<=n;j++)
    {
      dp[j]=min(dp[j],dp[i] + (pre2[j]-pre2[i]) - (pre[j][i]-pre[i][i]) + (pre[j][n]-pre[i][n]) - (pre[j][j]-pre[i][j]) );
    }
  }

  
  cout << dp[n] << endl;
}

int32_t main(){
   

     cin.tie(0); ios::sync_with_stdio(0);
     cout << fixed <<  setprecision(15);
   
   int t=1;//cin>> t;
 
 for(int i=1;i<=t;i++)
 {
  //  cout << "Case #" << i << ": ";
    solve();
 }
 
 return 0;
}

Compilation message

Main.cpp:2: warning: ignoring '#pragma optimize ' [-Wunknown-pragmas]
    2 | #pragma optimize ("Bismillahirrahmanirrahim")
      |
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 320 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 320 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 316 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 252 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 320 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 316 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 252 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 596 KB Output is correct
22 Correct 1 ms 572 KB Output is correct
23 Correct 1 ms 596 KB Output is correct
24 Correct 2 ms 596 KB Output is correct
25 Correct 1 ms 596 KB Output is correct
26 Correct 1 ms 596 KB Output is correct
27 Correct 1 ms 572 KB Output is correct
28 Correct 1 ms 596 KB Output is correct
29 Correct 1 ms 596 KB Output is correct
30 Correct 1 ms 596 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 320 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 316 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 252 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 596 KB Output is correct
22 Correct 1 ms 572 KB Output is correct
23 Correct 1 ms 596 KB Output is correct
24 Correct 2 ms 596 KB Output is correct
25 Correct 1 ms 596 KB Output is correct
26 Correct 1 ms 596 KB Output is correct
27 Correct 1 ms 572 KB Output is correct
28 Correct 1 ms 596 KB Output is correct
29 Correct 1 ms 596 KB Output is correct
30 Correct 1 ms 596 KB Output is correct
31 Correct 6 ms 5332 KB Output is correct
32 Correct 7 ms 5332 KB Output is correct
33 Correct 6 ms 5312 KB Output is correct
34 Correct 6 ms 5308 KB Output is correct
35 Correct 5 ms 5332 KB Output is correct
36 Correct 7 ms 5436 KB Output is correct
37 Correct 6 ms 5332 KB Output is correct
38 Correct 5 ms 5308 KB Output is correct
39 Correct 8 ms 5332 KB Output is correct
40 Correct 10 ms 5332 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 320 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 316 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 252 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 596 KB Output is correct
22 Correct 1 ms 572 KB Output is correct
23 Correct 1 ms 596 KB Output is correct
24 Correct 2 ms 596 KB Output is correct
25 Correct 1 ms 596 KB Output is correct
26 Correct 1 ms 596 KB Output is correct
27 Correct 1 ms 572 KB Output is correct
28 Correct 1 ms 596 KB Output is correct
29 Correct 1 ms 596 KB Output is correct
30 Correct 1 ms 596 KB Output is correct
31 Correct 6 ms 5332 KB Output is correct
32 Correct 7 ms 5332 KB Output is correct
33 Correct 6 ms 5312 KB Output is correct
34 Correct 6 ms 5308 KB Output is correct
35 Correct 5 ms 5332 KB Output is correct
36 Correct 7 ms 5436 KB Output is correct
37 Correct 6 ms 5332 KB Output is correct
38 Correct 5 ms 5308 KB Output is correct
39 Correct 8 ms 5332 KB Output is correct
40 Correct 10 ms 5332 KB Output is correct
41 Correct 683 ms 196096 KB Output is correct
42 Correct 670 ms 196208 KB Output is correct
43 Correct 745 ms 196248 KB Output is correct
44 Correct 695 ms 196252 KB Output is correct
45 Correct 693 ms 196196 KB Output is correct
46 Correct 687 ms 196324 KB Output is correct
47 Correct 696 ms 196332 KB Output is correct
48 Correct 682 ms 196428 KB Output is correct
49 Correct 679 ms 196336 KB Output is correct
50 Correct 689 ms 196324 KB Output is correct
51 Correct 675 ms 196364 KB Output is correct
52 Correct 684 ms 196324 KB Output is correct
53 Correct 742 ms 196332 KB Output is correct
54 Correct 752 ms 196324 KB Output is correct
55 Correct 741 ms 196300 KB Output is correct